«404 Not Found» между моим клиентом jQuery и веб-службой WCF SOAP - PullRequest
0 голосов
/ 08 сентября 2010

Может кто-нибудь определить, что не так с моим кодом?Я получаю 404 Not Found на firebug, когда я использую jQuery для вызова службы WCF SOAP.

Я нахожусь на Win7 с использованием IIS7.У меня есть wcf, работающий в приложении виртуального каталога как (http://localhost/csw). Я могу без проблем получить доступ к файлу service.svc по этому адресу: (http://localhost/csw/service.svc)

Вот мой Web.configмежду тегами конфигурации

<configuration>
<system.web>
    <compilation debug="true" targetFramework="4.0"/>
</system.web>
<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name ="soapBinding">
      <security mode="None">
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
        <service name="CatalogService" behaviorConfiguration="defaultBehavior">  
    <endpoint address="soap"
              binding="basicHttpBinding"
              bindingConfiguration="soapBinding"
              contract="ICatalogService" />
        </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior name="xmlBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>    
            <behavior name="defaultBehavior">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="true"/>
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

App_Code / ICatalogServices.cs:

[ServiceContract(Namespace = "http://test/CatalogService")] public interface ICatalogService {
[WebInvoke(Method = "POST",
             BodyStyle = WebMessageBodyStyle.Wrapped,
             ResponseFormat = WebMessageFormat.Xml,
             RequestFormat = WebMessageFormat.Xml)]
string HelloWorld(string name);}

App_Code / CatalogServices.cs:

public class CatalogService : ICatalogService{
public string HelloWorld(string name){
    return String.Format("Hello {0}", name);}}

jQueryПозвоните:

    $.ajax({
    type: 'POST',
    url: 'http://localhost/csw/service.svc/HelloWorld',
    data: request,
    contentType: 'application/xml; charset=utf-8',
    dataType: 'xml',
    success: function (result) {
        console.log(result);

        $("#result").text(result);
        //result.responseXML
        //result.responseText
    },
    error: function (message) {
        console.log(message);
        alert("error has occured" + message);
    }
});

Мой запрос xml:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">  <s:Body>  <HelloWorld xmlns="http://test/CatalogService">  <name>CarlosK</name>  </HelloWorld>  </s:Body>  </s:Envelope>

1 Ответ

3 голосов
/ 08 сентября 2010

URL в вашем коде jQuery неверен.Попробуйте использовать http://localhost/csw/service.svc/soap. Также измените тип содержимого на text / xml;charset = utf-8

Редактировать:

Адрес: имя операции не является частью URL при вызове службы SOAP.(в отличие от услуг REST).Также в вашей конфигурации вы определили относительный адрес для конечной точки SOAP.Допустимый URL-адрес: BaseAddress + /service.svc + / RelativeAddress.Адрес на основе определяется вашим виртуальным каталогом.

Тип содержимого: вы предоставляете службу на BasicHttpBinding.BasicHttpBinding использует SOAP 1.1.Правильный тип содержимого для SOAP 1.1 - text / xml и charset.

Изменить для новой ошибки:

Новая ошибка говорит о том, что она не может перенаправить пустое действие на операцию в вашей службе.Вы должны добавить HTTP-заголовок SOAPAction к вашему запросу, собранному jQuery.Значение для заголовка должно быть http://test/CatalogService/ICatalogService/HelloWorld

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...