Конечная точка служб данных с ошибкой в контракте System.Data.Services.IRequestHandler
Я получаю следующую ошибку при попытке создать конечную точку с контрактом System.Data.Services.IRequestHandler
Операция ProcessRequestForMessage не может быть загружена, поскольку она имеет параметр или тип возврата типа System.ServiceModel.Channels.Message или тип, имеющий MessageContractAttribute и другие параметры различных типов. При использовании System.ServiceModel.Channels.Message или типов с MessageContractAttribute метод не должен использовать какие-либо другие типы параметров.
Я нашел два других вопроса с этой ошибкой ( здесь и здесь), но ни один из них не имел удовлетворительных решений. Я вытащил пример с Northwind и смог воспроизвести проблему.
Упрощенный файл 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 выдает эту ошибку, когда я пытаюсь использовать ее в конечной точке. Я довольно новичок в Data Services, поэтому я уверен, что мне не хватает чего-то, что кажется очевидным для всех остальных.
Спасибо
Редактировать:
В конце дня моя цель - использовать проверку подлинности сертификатов, поэтому, если есть способ сделать это, работая над этой проблемой, я открыт для нее. Я использовал этот пример.
1 ответ
Ты используешь basicHttpBinding
, Измените это на webHttpBinding
,