标签: wcf-data-services

在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自<serviceDebug>配置行为)

我有一个完美的WCF服务,有些东西已经改变,我不知道是什么.

我得到这个例外:

System.ServiceModel.FaultException:由于内部错误,服务器无法处理请求.有关错误的更多信息,请在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或配置行为)以将异常信息发送回客户端,或者根据Microsoft .NET Framework 3.0 SDK文档打开跟踪并检查服务器跟踪日志.

这很令人困惑,因为我正在运行.NET 4.0.

我在哪里开IncludeExceptionDetailInFaults?我正在努力寻找它.

c# wcf exception wcf-data-services

154
推荐指数
4
解决办法
29万
查看次数

WCF数据服务(OData)与ASP.NET Web API

我正在设计一个分布式应用程序,它将包含RESTful服务和各种客户端(Silverlight,iOS,Windows Phone 7等).现在我正在确定应该使用哪种技术来实现我的服务,WCF数据服务(OData)或ASP.NET MVC 4推出的新ASP.NET Web API.

我在网上看了几个关于每个的演示文稿,现在我倾向于WCF数据服务,主要是因为URI内置的过滤机制和本机超媒体功能.我能看到的唯一缺点是Atom Pub规范的详细程度与POX相反.

在作出决定之前,我对这两项技术有什么了解吗?为什么有人会选择基于WCF数据服务的ASP.NET Web API?

rest wcf wcf-data-services odata asp.net-web-api

87
推荐指数
6
解决办法
4万
查看次数

Dispatcher BeginInvoke语法

我一直在尝试遵循一些WCF数据服务示例并具有以下代码:

private void OnSaveCompleted(IAsyncResult result)
    {
        Dispatcher.BeginInvoke(() =>
        {
            context.EndSaveChanges(result);
        });
    }
Run Code Online (Sandbox Code Playgroud)

以下称为:

this.context.BeginSaveChanges(SaveChangesOptions.Batch, this.OnSaveCompleted, null);
Run Code Online (Sandbox Code Playgroud)

现在我在这里有点困惑.首先,第一位代码显示语法错误"参数类型lambda表达式不能分配给参数类型System.Delegate".因此,我没有盲目地尝试遵循示例代码,而是试图了解这里发生了什么.不幸的是,我正在努力理解错误加上实际发生的事情.

我觉得有点愚蠢,因为我确信这很容易.

提前感谢任何启蒙!

.net c# multithreading wcf-data-services

43
推荐指数
3
解决办法
7万
查看次数

如何提高WCF数据服务性能

我是WCF数据服务的新手,所以我一直在玩.经过一些初步测试后,我对测试数据服务的性能感到失望.

我意识到因为WCF DS是基于HTTP的,所以协议中固有的开销,但我的测试仍然比我预期的慢:

环境:

  • 所有在一个盒子:四核64位笔记本电脑与4GB RAM运行W7.体面的机器.
  • 具有16个表的小型SQL数据库(SQLExpress 2008 R2)...正在测试的表有243行.
  • 在IIS中托管我的测试服务,包含所有默认值.

码:

  • 我为这个数据库创建了一个实体框架模型(DataContext)(VS2010的股票代码).
  • 我已经基于这个模型创建了一个数据服务.
  • 我已经创建了一个客户端,该服务器具有针对此服务的直接服务引用(ObjectContext)(VS2010的股票代码)
  • 在客户端我也可以直接调用EF模型并使用Native SQL(ADO.NET SqlConnection)

测试计划:

  • 每次迭代都连接到数据库(有一个重用连接的选项),查询目标表中的所有行("EVENTS"),然后对它们进行计数(从而强制执行任何延迟的提取).
  • 为Native SQL(SqlConnection/SqlCommand),实体框架(DataContext)和WCF数据服务(ObjectContext)分别运行25次迭代.

结果:

  • Native SQL的25次迭代:436ms
  • 实体框架的25次迭代:656ms
  • WCF数据服务的25次迭代:12110ms

哎哟.这比EF慢约20倍.

由于WCF数据服务是HTTP,因此没有机会进行HTTP连接重用,因此每次迭代都会强制客户端重新连接到Web服务器.但肯定还有比这更多的事情.

EF本身相当快,并且同样的EF代码/模型被重用于服务和直接到EF客户端测试.对数据服务中的Xml序列化和反序列化会有一些开销,但那么多!?!我以前在Xml序列化方面表现很好.

我将使用JSON和协议缓冲区编码运行一些测试,以确定我是否可以获得更好的性能,但我很好奇社区是否有任何关于加快这一点的建议.

我对IIS不太满意,所以也许有一些IIS调整(缓存,连接池等)可以设置来改善这个?

wcf astoria wcf-data-services wcf-ria-services

24
推荐指数
1
解决办法
1万
查看次数

如何在新的Silverlight应用程序中选择WCF,REST,POX和RIA服务

还有一个很大的不同的方式Silverlight应用程序可以连接返回到它的服务器.包含

对于这些中的每一个,请说明它的用途以及何时使用或不使用它.我不是在寻找一个很好的细节,只是一套"经验法则",可以在它们之间进行选择.

(问题是在设计第一个Silverlight应用程序时,知道在没有时间学习所有这些应用程序时要使用的内容.)

如果我在这个问题中用WPF替换Silverlight会对你的答案产生什么影响?(我假设WPF认为由于防火墙和管理员策略,不能直接连接到数据库.)

rest silverlight wcf wcf-data-services wcf-ria-services

22
推荐指数
2
解决办法
5839
查看次数

IGrouping的实现类是什么?

我正在尝试创建一个WCF数据服务ServiceOperation,它在服务器端进行分组,然后将数据发送到客户端.

当我尝试调用它(甚至连接到服务)时,我收到一个错误.它说它无法构建一个接口.

我使用的唯一界面是IGrouping.

什么是这个界面的实际类?


更新:

我在调试示例应用程序时检查了类型,它告诉我它是:

System.Linq.Lookup<TKey,TElement>.Grouping
Run Code Online (Sandbox Code Playgroud)

但它的装配是什么?

.net c# wcf-data-services

22
推荐指数
3
解决办法
1万
查看次数

Sequence不包含匹配元素 - EntityFramework

我正在使用EF 6.1.0并且正在创建WCF服务.

首先,我创建了一个包含我的实体,Mappers和Context的类库,用于初始化EF.我还创建了一个包含上下文实例化的类,并拥有以下代码:

public IQueryable<[Entity]> GetAll()
{
    return context.[Entity].AsQueryable();
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我在同一个项目上创建了一个WCF服务,并在.svc文件中调用函数GetAll(),如下所示:

public List<[Entity]> GetList()
{
    [iObject] repository = new [Object](new Context());
    return repository.GetAll().ToList();
}
Run Code Online (Sandbox Code Playgroud)

该项目正在建设中.我甚至检查了配置,它位于正确的数据库中.但是,应该创建的数据库和表不存在,并且返回中显示错误"Sequence contains no matching element".

如果这个令人困惑,您可以使用Code First Entity Framework向我指出WCF服务的一些链接.

c# wcf entity-framework wcf-data-services ef-code-first

22
推荐指数
3
解决办法
2万
查看次数

是否有可能查询Odata服务并扩展Child of Child实体?

这听起来很简单(也许我错过了这里显而易见的)但我找不到解决方案.我知道我可以查询实体并返回一个或多个直接子实体执行此操作:

var query = from c in Service.Clients.Expand("Addresses,Comments,PhoneNumbers")..
Run Code Online (Sandbox Code Playgroud)

我想能做的是做3个等级(孩子的孩子),让我们说"国家 - >省 - >城市"或"品牌 - >家庭 - >模型"

我试图扩展所有实体,但它失败了

var query = from c in Service.Brands.Expand("Families,Models").. //fails,
//which even makes some sense, since Models is a Child of Family, not Brand
var query = from c in Service.Brands.Expand("Families").. //this works, 
//but Family.Models is empty
Run Code Online (Sandbox Code Playgroud)

有没有办法在一个查询中执行此操作,还是必须在两个单独的查询中拆分它?

linq wcf-data-services odata

21
推荐指数
2
解决办法
2万
查看次数

WCF在自托管服务上流式传输大数据(500MB/1GB)

我目前遇到一个问题,试图使用WCF自托管服务(没有IIS)发送大数据.使用流式传输结果传输500MB,我的服务因System.OutOfMemoryException而崩溃.是否有可能转移这么多的数据?

这是我的WCF配置:

<system.serviceModel>
<services>
  <service  name="CIService" behaviorConfiguration="CIBehavior">        
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:6547/CIService/CIService.svc" />
      </baseAddresses>
    </host>
    <endpoint binding="netTcpBinding" 
        bindingConfiguration="netTcpBindingConfig" 
        behaviorConfiguration="CIBehavior.EndpointBehavior" 
        contract="CIService.ICreatable" />
    <endpoint address="mex" 
        binding="mexHttpBinding" 
        name="mexTcpBinding" 
        contract="IMetadataExchange" />
  </service>
</services>
<serviceHostingEnvironment multippleSiteBindingEnabled="True" />
<bindings>
  <netTcpBinding>
    <binding name="netTcpBindingConfig" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="01:00:00" sendTimeout="00:10:00" 
        hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxConnections="10"
        maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
        transferMode="Streamed">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </netTcpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="CIBehavior">
      <serviceMetadata httpGetEnabled="False" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="200"  maxConcurrentInstances="2147483647" maxConcurrentSessions="100" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehavior>
    <behavior name="CIBehavior.EndpointBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647" …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf wcf-data-services

21
推荐指数
1
解决办法
4万
查看次数

如何处理从WCF数据服务(OData)返回的json DateTime

我相信我在这里遗漏了一些明显的东西.当我从OData服务请求JSON响应时,我得到的DateTime属性的结果与我请求XML时的结果不同.我将使用NerdDinner OData feed作为示例.

JSON:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json
"EventDate": "\/Date(1235764800000)\/"
Run Code Online (Sandbox Code Playgroud)

XML:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate>
Run Code Online (Sandbox Code Playgroud)

当我做警报(新日期(1235764800000))时,我得到这个结果: 替代文字

当我使用LINQPad运行相同的查询时,我也得到了8PM的结果.为什么JSON结果中的时区不正确?似乎假设响应是GMT.我应该在客户端上处理这个(通过javascript)还是我可以在服务器上设置的东西?

我在客户端上使用jQuery,在服务器上使用WCF数据服务(和实体框架).

更新:

我在客户端使用Datejs来处理UTC日期时间格式.我想知道这是否是解决这个问题的正确方法.

 function getDateString(jsonDate) {
     if (jsonDate == undefined) {
         return "";
     }
     var utcTime = parseInt(jsonDate.substr(6));

     var date = new Date(utcTime);
     var minutesOffset = date.getTimezoneOffset();

     return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt");
 }
Run Code Online (Sandbox Code Playgroud)

wcf json wcf-data-services odata

20
推荐指数
3
解决办法
4万
查看次数