Фон
Я уже создал веб-службы ASMX в прошлом и смог получить доступ к сервису из веб-браузера и запросов AJAX GET с использованием соглашения об адресе: MyService.asmx/MyMethod?Param=xxx
Я только что начал использовать WCF и создал новый веб-сервис в моем проекте ASP.NET. Он создает файл с расширением .svc, таким как MyService.svc.
Текущая ситуация
Я могу использовать сервис, используя WcfTestClient
, который поставляется с VS2008. Я также могу создать собственный WCF-клиент, добавив ссылку на службу в другой проект или используя командную строку svcutil.exe
для создания прокси-сервера и файла конфигурации.
Проблема
Когда я пытаюсь использовать службу из браузера с помощью MyService.svc/MyMethod?MyParam=xxx
, я получаю пустую страницу без каких-либо ошибок.
Что я пробовал
Я уже добавил basicHttpBinding в web.config и сделал его HttpGetEnabled в конфигурации поведения. Я также добавил атрибут [WebGet(UriTemplate = "MyMethod?MyParam={MyParam}")]
к моему операционному контракту.
Я уже следил за информацией в этом другом вопросе:
Конечные точки REST/SOAP для службы WCF
Однако после выполнения этих шагов я либо получаю пустую страницу, либо ошибку HTTP 404. В коде нет ничего особенного. Я просто беру строку в качестве параметра и возвращаю "Hello xxx". Это базовая вещь типа "Hello WCF World".
UPDATE - здесь соответствующий код
[ServiceContract]
public interface IMyService
{
[WebGet(UriTemplate = "MyMethod/MyParam={MyParam}")]
[OperationContract]
string MyMethod(string MyParam);
}
Web.Config - system.serviceModel Section
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint address=""
binding="wsHttpBinding" contract="IMyService" />
<endpoint address="MyService.svc"
binding="basicHttpBinding" contract="IMyService" />
<endpoint address="mex"
binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>