Я испытывал то же исключение, что и это, когда пытался объединить две службы; один, который использовал конечную точку SOAP, а другой - конечную точку REST.
Я думаю, что проблема в том, что WCF, похоже, не нравится видеть операции, которые используют MessageContract
в в том же ServiceContract
в качестве операции REST. Таким образом, я смог обойти это, разделив контракты на две части, а затем используя конечную точку REST, только реализовав операцию WebGet
следующим образом:
[ServiceContract]
public interface IExampleSoapService : IExampleRestService
{
[OperationContract]
void SomeSoapOperation(ExampleMessageContract message);
}
[ServiceContract]
public interface IExampleRestService
{
[OperationContract]
[WebGet(UriTemplate = "/{id}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
void SomeRestOperation(int id);
}
А затем в конфигурации:
<services>
<service name="ExampleService">
<endpoint name="ExampleService.BasicHttpBinding"
binding="basicHttpBinding"
contract="IExampleSoapService"
address="soap" />
<endpoint name="ExampleService.WebHttpBinding"
binding="webHttpBinding"
contract="IExampleRestService" />
</service>
</services>
Когда я разбил контракты следующим образом, проблема, похоже, исчезла.