Метод WCF, получающий запросы GET и SOAP - PullRequest
1 голос
/ 01 сентября 2010

я создал службу WCf с методом, который может получать запросы GET с использованием атрибута WebGET, я хочу, чтобы тот же метод тоже получал вызовы Soap (чтобы, когда программист ссылается на службу в WCF, он мог вызватьметод).

мой интерфейс:

[ServiceContract] 
public interface IService1 
{ 
  [OperationContract] 
  [WebGet(UriTemplate = "GetData?value={value}")] 
  string GetData(int value); 
} 

Моя конфигурация:

<configuration>
 <system.web>
  <compilation debug="true" targetFramework="4.0" />
 </system.web>
 <system.serviceModel>
  <behaviors>
   <serviceBehaviors>    
    <behavior name="MyServiceBehavior">
     <serviceMetadata httpGetEnabled="true"/>
     <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior> 
   </serviceBehaviors>
   <endpointBehaviors>
    <behavior name="WebBehavior">
     <webHttp />
    </behavior>
   </endpointBehaviors>
  </behaviors>
  <services>
   <service name="WCFTestingGetService.Service1" behaviorConfiguration="MyServiceBehavior" >
    <endpoint address="" binding="webHttpBinding" contract="WCFTestingGetService.IService1" behaviorConfiguration="WebBehavior"></endpoint>
   </service>
  </services>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
 </system.serviceModel>
 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
 </system.webServer>
</configuration>

Могу ли я сделать веб-метод GetData методом HTTP GET и SOAP?

что мне нужно добавить в конфигурацию?

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

Вы можете использовать REST и SOAP в одной и той же службе, но в случае SOAP операция будет вызываться с HTTP POST.Ваш контракт определен правильно.Вы должны изменить свою конфигурацию:

  <services> 
   <service name="WCFTestingGetService.Service1" behaviorConfiguration="MyServiceBehavior" > 
    <endpoint address="" binding="webHttpBinding" contract="WCFTestingGetService.IService1" behaviorConfiguration="WebBehavior"/>
    <endpoint address="soap" binding="basicHttpBinding" contract="WCFTestingGetService.IService1"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service> 
  </services> 
0 голосов
/ 01 сентября 2010

Я бы удалил атрибут webget и использовал basichttpbinding. Затем вы можете получить доступ к сервису с помощью любого клиента мыла или wcf.

Вы также можете разместить asmx помимо svc, но это не так тихо, верно.

С уважением,

Michel

...