Метод WCF, выдающий 400 неверных запросов в методе GET / POST

Я недавно создал WCF и сталкиваюсь с ошибкой 400 bad req, когда пытаюсь попасть по URL-адресу из браузера.

мой контракт на обслуживание выглядит как

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "GetUsers")]
string GetUsers();

Я уже сделал запись в webconfig как

<serviceMetadata httpGetEnabled="true"/>

URL-адрес, который я нажимаю в браузере,

http://localhost:51561/AceWebService.svc/GetUsers

вот часть webconfig:

<system.serviceModel>
    <services>
        <service name="AceWebService.AceWebService" behaviorConfiguration="AceWebService.AceWebServiceBehavior">
            <!-- Service Endpoints -->
            <endpoint address="" binding="wsHttpBinding" contract="AceWebService.IAceWebService">
                <!-- 
          Upon deployment, the following identity element should be removed or replaced to reflect the 
          identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
          automatically.
      -->
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="AceWebService.AceWebServiceBehavior">
                <!-- 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="true"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Ссылались на все вопросы, доступные здесь, в stackoverflow ... не получили никакой помощи ... предложите изменения.

спасибо


person 1Mayur    schedule 15.03.2012    source источник


Ответы (2)


Вы использовали привязку wsHttpBinding, определенную на вашей конечной точке. Просто измените его на webHttpBinding, и он должен заработать.

person Rajesh    schedule 15.03.2012

Во-первых, используйте WebGet для запросов GET. Во-вторых, заставьте службу работать без интерфейса контракта службы, а затем, когда она заработает, переместите контракт в интерфейс.

это работает для меня:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[ServiceContract]
public class HelloService 
{

    [WebGet(UriTemplate = "helloworld")]
    [OperationContract]
    public string HelloWorld()
    {
         return "Hello World!";
    }

}
person reach4thelasers    schedule 15.03.2012
comment
Я хочу знать, что не так в моем приведенном выше коде .. не хочу альтернативы - person 1Mayur; 15.03.2012