2013-05-29 2 views
0

Я создал экземпляр WCF RoutingService, а также конкретную услугу для его маршрутизации. Я могу подключиться к нему с помощью тестового консольного приложения, но я получаю «Endpoint not found». когда я пытаюсь подключиться через AJAX.Не удается подключиться к WCF RoutingService через AJAX: «Конечная точка не найдена».

реализация бетона сервиса выглядит следующим образом:

[ServiceContract] 
public interface IHelloService 
{ 
    [OperationContract] 
    string SayHi(); 
} 

public class HelloService : IHelloService 
{ 
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
    public string SayHi() 
    { 
     return "Hello World"; 
    } 
} 

И его файл App.config содержит это:

<system.serviceModel> 
    <services> 
     <service name="Rashim.RND.WCFRouting.HelloWorldService.HelloService"> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost:7222/HelloWorldService/HelloService/"/> 
       </baseAddresses> 
      </host> 
      <endpoint address="/soap" binding="wsHttpBinding" contract="Rashim.RND.WCFRouting.HelloWorldService.IHelloService"/> 
      <endpoint address="/web" kind="webHttpEndpoint" contract="Rashim.RND.WCFRouting.HelloWorldService.IHelloService"/> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <standardEndpoints> 
     <webHttpEndpoint> 
      <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" crossDomainScriptAccessEnabled="true"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
       <serviceMetadata httpGetEnabled="True"/> 
       <serviceDebug includeExceptionDetailInFaults="True"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

Web.config Службы Routing является так:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="routingBehavior"> 
       <routing routeOnHeadersOnly="false" filterTableName="filters"/> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
       <serviceMetadata httpGetEnabled="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <routing> 
     <filters> 
      <filter name="SoapHelloServiceFilter" filterType="EndpointName" filterData="SoapHelloServiceIn"/> 
      <filter name="WebHelloServiceFilter" filterType="EndpointName" filterData="WebHelloServiceIn"/> 
     </filters> 
     <filterTables> 
      <filterTable name="filters"> 
       <add filterName="SoapHelloServiceFilter" endpointName="SoapHelloServiceOut"/> 
       <add filterName="WebHelloServiceFilter" endpointName="WebHelloServiceOut"/> 
      </filterTable> 
     </filterTables> 
    </routing> 
    <services> 
     <service name="System.ServiceModel.Routing.RoutingService" behaviorConfiguration="routingBehavior"> 
      <endpoint address="/soapHello" binding="wsHttpBinding" contract="System.ServiceModel.Routing.IRequestReplyRouter" name="SoapHelloServiceIn"/> 
      <endpoint address="/webHello" kind="webHttpEndpoint" contract="System.ServiceModel.Routing.IRequestReplyRouter" name="WebHelloServiceIn"/> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost:7111/RouterService.svc"/> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 
    <client> 
     <endpoint address="http://localhost:7222/HelloWorldService/HelloService/soap" binding="wsHttpBinding" contract="*" name="SoapHelloServiceOut"/> 
     <endpoint address="http://localhost:7222/HelloWorldService/HelloService/web" binding="wsHttpBinding" contract="*" name="WebHelloServiceOut"/> 
    </client> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <standardEndpoints> 
     <webHttpEndpoint> 
      <standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" crossDomainScriptAccessEnabled="true"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 
</system.serviceModel> 

Когда я вызываю службу с использованием конечной точки SOAP, как это, она работает нормально:

string address = "http://localhost:7111/RouterService.svc/soapHello"; 
Console.WriteLine("Address: {0}", address); 

var binding = new WSHttpBinding(); 
var endpoint = new EndpointAddress(address); 
var proxy = ChannelFactory<IHelloService>.CreateChannel(binding, endpoint); 
Console.WriteLine("Reply from server: " + proxy.SayHi()); 

Но когда я пытаюсь вызвать его с помощью AJAX с помощью этого сценария (работает на том же сайте IIS в качестве службы маршрутизации), он не:

$.ajax(
{ 
    type: 'POST', 
    url: "RouterService.svc/webHello/SayHi", 
    data: null, 
    contentType: "application/json; charset=utf-8", 
    success: 
     function(msg) 
     { 
      alert(msg); 
     }, 
    error: 
     function(xhr, ajaxOptions, thrownError) 
     { 
      alert('Error ' + thrownError + '. Response: ' + xhr.responseText); 
     } 
}); 

Ответ я вернусь это (завернутые в HTML):

Endpoint not found. Please see the <a rel="help-page" href="http://localhost:7111/RouterService.svc/webHello/help">service help page</a> for constructing valid requests to the service. 

И самое странное, когда я иду к этому URL, это говорит о том, что я использую Ури «ProcessRequest» доступа «службы в http://localhost:5725/RouterService.svc/webhello/ProcessRequest».

Может ли кто-нибудь увидеть, что я здесь делаю неправильно?

ответ

0

Это не сработает, потому что WCF-Routing основана на SOAP. Посмотрите на эту MSDN article о WCF-маршрутизации, он говорит:

маршрутизации Служба в настоящее время не поддерживает маршрутизацию WCF REST услуги

+0

Я думаю, что ответы на это! Благодарю. – JJS

+0

Столько длинный вопрос для этого столь короткого ответа ;-) Не забудьте подняться, если вы сочтете это полезным! – MaxSC

+0

Я пробовал, но я только что присоединился, так что пока у меня не хватает репутации. – JJS