2013-07-08 12 views
5

Podczas korzystania z firebug, mam ten błąd przewodowy "NetworkError: 415 Nie można przetworzyć ... xt/xml; charset = utf-8" - http://localhost:59899/wsccc1/wscccService.svc/RunTts "w moim projekcie asp.net mvc 4.typ zawartości "application/json; charset = utf-8 'nie był oczekiwanym typem "text/xml; charset = utf-8 '

Kod:

<script lang="javascript" type="text/javascript"> 
    function ttsFunction() { 
     serviceUrl = "http://localhost:59899/wsccc1/wscccService.svc/RunTts"; 
     var data = new Object(); 
     data.text = $('#speak').val(); 
     var jsonString = JSON.stringify(data); 
     $.ajax({ 
      type: 'POST', 
      url: serviceUrl, 
      data: jsonString, 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function() { alert('ok')}, 
      error: function (xhr,status,error) { 
       console.log("Status: " + status); 
       console.log("Error: " + error); 
       console.log("xhr: " + xhr.readyState); 
      }, 
      statusCode: { 
       404: function() { 
        console.log('page not found'); 
       } 
      } 
     }); 
    } 
</script> 

Kod usługi:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
public class wservice:Iwservice 
{ 
    public string RunTts(string value) 
    { 
     return value.ToUpper(); 
    } 
} 

Interfejs jest:

namespace service 
{ 
    [ServiceContract] 
    public interface Iwservice 
    { 
     [OperationContract] 
     [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "RunTts")] 
     string RunTts(string text); 
    } 
} 

I web config, użyłem plików mniej w WCF .:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5"/> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 
    <serviceHostingEnvironment > 
     <serviceActivations> 
     <add factory="System.ServiceModel.Activation.ServiceHostFactory" 
    relativeAddress="./wsccc1/wscccService.svc" 
    service="service.wservice"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 
+0

Czy klasa "wsservice' znajduje się w przestrzeni nazw' service'? Jeśli nie, nie będzie pasować do aktywacji usługi. – carlosfigueira

+0

Tak, nie wpisałem tego w kodzie. Kiedy wpisałem w przeglądarce http: // localhost: 59899/wsccc1/wscccService.svc, to działa. –

+0

Nie masz WebHttpBehavior? – Praburaj

Odpowiedz

11

Musisz użyć WebServiceHostFactory, zamiast zwykłego ServiceHostFactory w swoim kodzie. To skonfiguruje punkt końcowy z odpowiednim wiązaniem (webHttpBinding) i zachowaniem (webHttp) w celu uwzględnienia atrybutu [WebInvoke].

<serviceHostingEnvironment > 
    <serviceActivations> 
    <add factory="System.ServiceModel.Activation.WebServiceHostFactory" 
      relativeAddress="./wsccc1/wscccService.svc" 
      service="service.wservice"/> 
    </serviceActivations> 
</serviceHostingEnvironment> 
+0

To działa, dziękuję. –

+0

to w moim przypadku mam ten sam problem i dostaję go tylko wtedy, gdy próbuje wywołać moje usługi z jquery. Jak to się stało, że nie mam WebServiceHostFactory, ale działa to dobrze przy tworzeniu tego samego typu dzwonków przez Fiddlera, ponieważ używam go do testowania? – PositiveGuy

4

Idź do web.config znacznika końcowego i sprawdzić, czy jest prawidłowo bindingConfiguration obecne lub nie, a także upewnić się, że adres jest wpisany poprawnie.

<endpoint address="/YourName".../> 
Powiązane problemy