我有一个简单的WCF数据服务服务,我想公开一个服务操作,如下所示:
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class ProductDataService : DataService<ProductRepository>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*",
EntitySetRights.ReadMultiple | EntitySetRights.ReadSingle);
config.SetServiceOperationAccessRule("*",
ServiceOperationRights.All);
config.UseVerboseErrors = true;
}
// This operation isn't getting generated client side
[WebGet]
public IQueryable<Product> GetProducts()
{
// Simple example for testing
return (new ProductRepository()).Product;
}
Run Code Online (Sandbox Code Playgroud)
GetProducts当我在客户端添加服务引用时,为什么方法不可见?
我正在运行Visual Studio 2008 SP1和.NET Framework 3.5 SP1.我还下载并安装了此更新:
我正在玩WCF数据服务(ADO.NET数据服务).我有一个指向AdventureWorks数据库的实体框架模型.
当我从Visual Studio中调试我的svc文件时,它工作得很好. 我可以说/awservice.svc/Customers并取回我期望的ATOM提要.
如果我将服务(在ASP.NET Web应用程序中托管)发布到IIS7,则相同的查询字符串将返回500错误.根svc页面本身按预期工作并成功返回ATOM./ Customers路径失败.
这是我的授权在svc文件中的样子:
public class AWService : DataService<AWEntities>
{
public static void InitializeService( DataServiceConfiguration config )
{
config.SetEntitySetAccessRule( "*", EntitySetRights.All );
config.SetServiceOperationAccessRule( "*", ServiceOperationRights.All );
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我启用了详细错误并在XML消息中获取以下内容:
<innererror>
<message>The underlying provider failed on Open.</message>
<type>System.Data.EntityException</type>
<stacktrace>
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(
...
...
<internalexception>
<message>
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
</message>
<type>System.Data.SqlClient.SqlException</type>
<stacktrace>
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ...
Run Code Online (Sandbox Code Playgroud) 我正在使用EDMX创建一个带有WCF数据服务的OData服务.如何为实体类型创建计算属性,以便在服务(C#)中计算其值并且不是来自数据库?
此属性的值基于其他属性的值,这些属性映射到数据库中的字段.
我们将很快开发一个大型企业桌面应用程序,我花了一些时间研究WPF + PRISM + MVVM方法,我已经很好地掌握了大多数概念,并且非常喜欢它提供的模块化.
我遇到问题的方法是如何构建服务层以获取数据,特别是当模块引入该服务时,依赖模块可以使用它.
我想在应用程序服务中抽象我的WCF数据服务,并用于ServiceLocator从我的视图模型中解析具体实例,但是我很难弄清楚它应该如何挂起,主要是因为我的entites是WCF服务的一部分.
例如
Module1 包含WCF服务+具体应用程序服务(ISearchService)+ WCF服务生成的实体(模型)
Module1.Infastructure - 包含应用程序服务的以下接口
public interface ISearchService
{
ObservableCollection<Person> Search(string search);
}
Run Code Online (Sandbox Code Playgroud)
这将在UnityContainer中注册,以便任何其他模块可以获得模块内嵌的具体实现.
我的问题是Entities(Person)是在模块本身(在WCF服务中)中定义的,因此引入服务然后期望任何其他模块能够使用它意味着他们需要引用模块本身而不仅仅是模块infastructure除非我将服务撤出到另一个程序集中.
我应该以这种方式暴露我的EF模型自动生成的entites吗?
有没有人有更好的解决方案?
我遇到了一个问题,当我尝试使用OfType()方法对我的odata服务进行linq查询时,我收到一条错误消息,指出该请求对于版本2服务无效.我创建了WCF数据服务并将MaxProtocolVersion设置为v3.
public class TestDirectorySearch : DataService<TestDirectoryEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetEntitySetPageSize("*", 50);
config.UseVerboseErrors = true;
config.DataServiceBehavior.MaxProtocolVersion = System.Data.Services.Common.DataServiceProtocolVersion.V3;
}
}
Run Code Online (Sandbox Code Playgroud)
我的edmx有以下几行:
<edmx:DataServices m:DataServiceVersion="1.0"
m:MaxDataServiceVersion="3.0"
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
Run Code Online (Sandbox Code Playgroud)
当我尝试执行以下查询时,我收到一条错误消息,指出当MaxProtocolVersion小于'3.0'时,不支持"方法'OfType'."
from test in context.Tests.OfType<OrderableTest>()
where test.TestRevisionId.Equals(mmt.RevisionId)
select new
{
Reflex = test.ReflexTest
, ShipTemp = (test.SpecimenTemperature == null) ? null : test.SpecimenTemperature.DisplayDescription
}).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果我检查上下文的MaxProtocolVersion,则将其设置为v2.这在什么时候失败了?我该怎么做才能正确设置?
确切的错误:
{"当MaxProtocolVersion小于'3.0'时,不支持'OfType'方法."}
请求的堆栈跟踪:
at System.Data.Services.Client.ResourceBinder.AnalyzeOfType(MethodCallExpression mce, DataServiceProtocolVersion maxProtocolVersion)
at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce)
at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp)
at System.Data.Services.Client.ALinqExpressionVisitor.VisitExpressionList(ReadOnlyCollection`1 original)
at System.Data.Services.Client.ALinqExpressionVisitor.VisitMethodCall(MethodCallExpression m)
at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression …Run Code Online (Sandbox Code Playgroud) 这是我第一次建立OData服务,我当然遇到了一些问题......
问题是我无法运行服务,我不断收到"请求错误".

我已经研究了问题是什么,我发现一个常见的问题是访问规则输入错误.所以我尝试用奇异的名字,多个名字修复这个,我也尝试过typeof(Post).getType().Name
那么这是我的代码.我希望你能帮助我,我已经被困了几个小时.
public class ODataService : DataService<Entity>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService( DataServiceConfiguration config )
{
//config.SetEntitySetAccessRule( "Users", EntitySetRights.All );
//config.SetEntitySetAccessRule( "Posts", EntitySetRights.All );
//config.SetEntitySetAccessRule( "Albums", EntitySetRights.All );
config.SetEntitySetAccessRule( "*", EntitySetRights.AllRead );
config.SetServiceOperationAccessRule( "*", ServiceOperationRights.AllRead );
//config.SetServiceOperationAccessRule( "GetPosts", ServiceOperationRights.AllRead );
config.UseVerboseErrors = true;
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
[WebGet]
public IQueryable<Post> GetPosts()
{
return CurrentDataSource.Posts.AsQueryable();
}
}
Run Code Online (Sandbox Code Playgroud)
我的EntityFramework类的结构(db first)

实体类的方法和成员.这里的实体拼写为复数形式.

这是我的Web.config:
<?xml version="1.0"?>
<!--
For …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用WCF数据服务提供的OData服务来实现我认为的简单场景(使用OData V3应用程序/ json; odata =详细的有效载荷格式,现在.我将来可能会使用JSON Light格式) .基本情况如下:
我有两个实体:
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual PersonCategory Category { get; set; }
}
class PersonCategory
{
public int ID { get; set; }
public string Description { get; set; }
public virtual ICollection<Person> People { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我想为Person创建一个简单的编辑页面.此编辑页面可能具有Name的输入,以及Person类别的输入或下拉列表.
所以,场景如下:
这里的关键是"单一请求".这是我找不到文档的部分.我见过他们将上面的数字3分成两个请求的例子.这样的事情(我不记得确切的格式 - 我也不确定你在做PUT之前是否必须删除Category链接):
PATCH /api.svc/People(1) with content: {"Name": "new name" }
PUT /api.svc/People(1)/$links/Category …Run Code Online (Sandbox Code Playgroud) 我想在我的WPF项目中使用WCF服务(.svc).我试图创建一个服务.但是在Visual Studio中我们有"WCF服务库"和"WCF服务应用程序".我试过了两个.
当我们创建"WCF服务应用程序"时,我们将获得.svc文件.,当我们托管时,我们将获得.svc文件作为服务参考.
但是"WCF服务库"项目怎么样?当我创建这个我只有.cs文件,我试图添加新的.svc文件,但我们没有添加.svc文件的选项.请指导我如何使用My WPF应用程序中"WCF服务库"项目创建的服务
我一直在努力让WCF数据服务服务器工作几天.我终于在今天退缩了,只是尝试完全按照快速启动的方式展示......没有其他......以及完全新鲜的项目.肯定会有用.
但它没有..它失败的方式与我的其他测试相同.
我只是跟着这个例子.使用Visual Studio 2013进行Web Express和托管正在使用IIS Express.我已安装WCF工具5.6版,以便Visual Studio具有WFC数据服务5.6模板.
它的要点是
创建ASP.Net应用程序选择MVC类型,不为MVC以外的任何内容添加任何文件夹,也不添加单元测试,个人帐户认证.
为NorthWind数据库添加ADO.Net实体数据模型,在web.config中称为NorthwindEntities,导入所有表.
添加WCF数据服务5.6项,将其命名为NorthWind.svc.
将NorthWind.svc.cs支持代码更改为以下内容.
using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
namespace StackOverflowApp
{
public class NorthWindService : DataService<NorthwindEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead | EntitySetRights.WriteMerge | EntitySetRights.WriteReplace );
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead| EntitySetRights.AllWrite);
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在它已准备好构建和运行..它应该工作..是吗?
我运行它,然后导航到服务..我受到以下投诉的欢迎.
<div id="content"> …Run Code Online (Sandbox Code Playgroud) 您好我使用HttpWebRequest GET方法来调用REST服务.我收到错误: - ***'Content-Type'标头必须使用适当的属性或方法进行修改.参数名称:name.***我从stackoverflow检查了所有与此问题相关的答案.
我的代码: -
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Getvalue(TextBox1.Text,TextBox2.Text,TextBox3.Text);
}
private void Getvalue(string text1, string text2, string text3)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.KeepAlive = true;
request.ContentType = "appication/json";
request.Headers.Add("Content-Type", "appication/json");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string myResponse = "";
using (System.IO.StreamReader sr = new system.IO.StreamReader(response.GetResponseStream()))
{
myResponse = sr.ReadToEnd(); …Run Code Online (Sandbox Code Playgroud)