尝试使用System.Data.Services.IRequestHandler合约创建端点时收到以下错误
无法加载“ProcessRequestForMessage”操作,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute的类型和其他不同类型的参数。使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数。
我发现了另外两个有关此错误的问题(here和here),但他们都没有满意的解决方案。我拉了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。
答案 0 :(得分:0)
您正在使用basicHttpBinding
。将其更改为webHttpBinding
。