2011-09-20 10 views
4

Я создал простую функциюWCF 400 Bad Request

 [OperationContract] 
     [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)] 
     string Start(); 

Определение,

 public String Start() 
     { 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      return serializer.Serialize("Check"); 
     } 

из браузера с помощью JavaScript/Jquery, http://localhost/service1.svc говорит мне, что я создал сервис и все другие данные .. Выглядит хорошо.
Я пытаюсь вызвать используя http://localhost/service1.svc/Start

Я получаю 400 плохой запрос на этот вызов. Надеюсь, я не делаю здесь ничего плохого. Я должен иметь доступ к службе WCF из браузера? Я пробовал много искать, прежде чем думать о публикации. Но я не могу заставить эту основную работу расстраивать меня.

EDIT & UPDATE Теперь я на данном этапе. Страница Служба говорит мне, что служба метаданных отключена, и просит меня, чтобы вставить следующий текст

<serviceMetadata httpGetEnabled="true" /> 

Я вставленный текст - но все же это показывает тот же текст !! Это становится слишком запутанным сейчас ..

+0

Есть ли у вас какие-либо полезные данные с этим кодом состояния? Если нет, попробуйте включить параметр, который отправляет сообщения об ошибках клиенту. Это в элементе ServiceBehaviors/Behavior. –

+0

Устанавливается как true. Но я не получаю никакой полезной нагрузки. Просто код состояния. – Tom

+0

@ a.dimo прав, ваш указатель указывает, что ваш метод следует вызывать только с использованием метода POST. Когда вы запрашиваете его в браузере, он отправляет запрос GET. –

ответ

1

Попробуйте изменить POST с GET и перезапустить запрос

+0

Nopes. Это не помогло. Я уже пробовал каждую комбинацию - start, start (int id), GET и POST – Tom

+0

Почему вы думали, что изменение POST в GET поможет ???? – Tom

1

работает для меня. Я создал службу отдыха WCF.

Я использую URL, который выглядит как http://localhost:8080/Service1/Start

Вот код:

using System.ServiceModel; 
using System.ServiceModel.Activation; 
using System.ServiceModel.Web; 
using System.Web.Script.Serialization; 

namespace WcfRestService1 
{ 
    // Start the service and browse to http://<machine_name>:<port>/Service1/help to view the service's generated help page 
    // NOTE: By default, a new instance of the service is created for each call; change the InstanceContextMode to Single if you want 
    // a single instance of the service to process all calls. 
    [ServiceContract] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
    // NOTE: If the service is renamed, remember to update the global.asax.cs file 
    public class Service1 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] 
     public string Start() 
     { 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      return serializer.Serialize("Check"); 
     } 
    } 
} 
+0

Хм .. Я не могу определить, что происходит в моем коде. – Tom

+0

Какой проект вы создали? Просто приложение службы WCF (под вкладкой WCF в VS) или сервисное приложение WCF REST (вкладка «Веб»). –

+0

Из WCF -> Приложение WCF Service> Я провел еще несколько исследований, и вот что я нашел .. Невозможно импортировать wsdl: portType Подробности – Tom