具有System.Data.Services.IRequestHandler合同的Data Services端点抛出错误

时间:2012-11-28 19:06:28

标签: certificate wcf-data-services wcf-endpoint servicecontract

尝试使用System.Data.Services.IRequestHandler合约创建端点时收到以下错误

无法加载“ProcessRequestForMessage”操作,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute的类型和其他不同类型的参数。使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数。

我发现了另外两个有关此错误的问题(herehere),但他们都没有满意的解决方案。我拉了Northwind example并且能够重现这个问题。

简化的web.config文件:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
  <system.serviceModel>
    <services>
      <service  name="NorthwindService.Northwind">
        <endpoint address="http://localhost:12345/Northwind.svc" binding="basicHttpBinding" contract="System.Data.Services.IRequestHandler" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

.svc文件:

<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, Microsoft.Data.Services, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Service="NorthwindService.Northwind" %>

我可以通过用我自己的合同替换System.Data.Services.IRequestHandler合同并删除错误消息所抱怨的参数来消除错误。

内置的ServiceContract,它会抛出错误:

namespace System.Data.Services
{
  [ServiceContract]
  public interface IRequestHandler
  {
    [OperationContract]
    [WebInvoke(UriTemplate = "*", Method = "*")]
    Message ProcessRequestForMessage(Stream messageBody);
  }
}

我的ServiceContract,它不会抛出错误(但由于我没有复制所有DataService<T>功能,因此也无法正常工作):

namespace NorthwindService
{
  [ServiceContract]
  interface Interface1
  {
    [OperationContract]
    [WebInvoke(UriTemplate = "*", Method = "*")]
    Message ProcessRequestForMessage();
  }
}

当我尝试在端点中使用它时,我很困惑为什么内置ServiceContract会抛出此错误。我对数据服务很新,所以我确信我错过了其他人看似显而易见的东西。

由于

修改
在一天结束时,我的目标是使用证书身份验证,所以如果有办法在解决这个问题时这样做,我会对它开放。我一直在使用这个example

1 个答案:

答案 0 :(得分:0)

您正在使用basicHttpBinding。将其更改为webHttpBinding