Как мне изучить методы WCF в браузере?

У меня есть служба net.tcp, которую я хочу сделать доступной для других платформ (в частности, PHP). Для этого я использую http-привязку.

Я создаю конечную точку http с помощью:

ServiceHost svh = new ServiceHost(typeof(MyService));
var httpLocation = "http://" + address + ":4041";
svh.AddServiceEndpoint(typeof(IMyService), new WebHttpBinding(WebHttpSecurityMode.None), 
                                   httpLocation);

svh.AddServiceEndpoint(
                    ServiceMetadataBehavior.MexContractName,
                    MetadataExchangeBindings.CreateMexHttpBinding(),
                    httpLocation + "/mex"
                    );

svh.Open();

Теперь, когда я пытаюсь изучить службу через браузер, перейдя на http://localhost:4041, я получаю:

<Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none">
<Code>
<Value>Sender</Value>
<Subcode>
<Value xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:ActionNotSupported</Value>
</Subcode>
</Code>
<Reason>
<Text xml:lang="en-US">
The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
</Text>
</Reason>

Что я делаю неправильно?


person Arsen Zahray    schedule 17.01.2013    source источник
comment
Какой URL-адрес вы пытаетесь просмотреть (или его пример)?   -  person alan    schedule 18.01.2013
comment
Как вы размещаете свой WCF? Это через визуальную студию или IIS?   -  person alan    schedule 22.01.2013


Ответы (2)


При просмотре обязательно укажите полный путь к .svc или .asmx вместе с завершающим ?wsdl.

localhost:4041/ServiceVirtualDirectory/Service.svc?wsdl
person alan    schedule 17.01.2013
comment
Каким будет этот путь в моем случае? Я безуспешно пытался получить доступ к http://localhost:4041/Service.svc?wsdl. Я не совсем уверен, что такое Service.svc и откуда его брать - person Arsen Zahray; 18.01.2013
comment
Трудно сказать, размещаете ли вы в IIS? Обычно первая косая черта - это имя виртуального каталога, а вторая - имя проекта WCF. - person alan; 18.01.2013

Вы пробовали получить доступ к http://localhost:4041/MyService.svc?wsdl?

Не уверен, что ваша служба по дизайну поддерживает REST, и именно поэтому вы использовали WebHttpBinding. Если ваша служба действительно работает в режиме REST, ее формат будет http://localhost:4041/MyService.svc/MyMethod/MyData, и вы должны увидеть результаты в браузере. На основе этого потока ASP.NET вам потребуется прикрепить WebHttpBehavior.

Если ваша служба не поддерживает REST, вам следует рассмотреть BasicHttpBinding (использует обычные сообщения SOAP) или его родственников в зависимости от ваших требований (см. this SO thread).

Надеюсь это поможет.

person Channs    schedule 18.01.2013