2015-06-12 5 views
5

Я не могу для жизни меня выяснить, что происходит, и о том, что я не могу отправить на службу с помощью json. Я пробовал читать каждый комментарий под солнцем из Google по вопросам, которые у меня есть, но все в настоящее время приводит меня в тупик. Пожалуйста помоги!Служба WCF с использованием Json Bad Request

Я передаю услугу обратной передачи третьим лицам по URL-адресу обратного вызова в сообщении службы. Третья сторона затем возвращается обратно в Json обратно в мою службу wcf, используя обратный URL. У меня нет проблем с исходным сообщением, но они и я не могут попасть в службу обратного вызова. Я еще пытался, но Fiddler возвращает ошибку 400, но я не уверен, почему. Мне нужно немного больше, чем веб-ссылки и такие, чтобы исправить эту проблему. пожалуйста помоги!

файл Web.config

<system.serviceModel> 
<services> 
    <service behaviorConfiguration="serviceBehavior" name="IBVWebService.InstantBankVerificationPostBack"> 
    <endpoint address="http://localhost:64337/InstantBankVerificationPostBack.svc" behaviorConfiguration="web" binding="webHttpBinding" contract="IBVWebService.IInstantBankVerificationPostBack"></endpoint> 
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
    <behavior name="web"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="serviceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Web Interface

[OperationContract] 
    [WebInvoke(
    Method = "POST", 
    BodyStyle = WebMessageBodyStyle.WrappedRequest, 
    RequestFormat = WebMessageFormat.Json)] 
    void PostBack(String json); 

Test Client

 WebClient client = new WebClient(); 
     client.Headers["Content-type"] = "application/json"; 
     client.Encoding = System.Text.Encoding.UTF8; 
     string jsonInput = "{'data':'testvalue'}"; 
     client.UploadString("http://localhost:64337/InstantBankVerificationPostBack.svc/PostBack", jsonInput); 

текущий журнал трассировки. Tracelog

+2

Вы включить трассировку WCF https://msdn.microsoft.com/en-us/library/ ms733025 (v = vs.110) .aspx, чтобы получить более подробную информацию об ошибке? –

+0

также настроить 'webBehavior', чтобы включить более подробную информацию. –

+0

и считайте, что вы используете 'BodyStyle = WebMessageBodyStyle.WrappedRequest' –

ответ

5

я копировал свой сценарий, с помощью простого ФОС службы с конфигурациями вы имеете и простой тест клиента:

WCF

[OperationContract] 
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
    void PostBack(String json); 

Клиент:

string jsonInput = "{\"json\":\"testvalue\"}"; 
using (var client = new WebClient()) 
{ 
    client.Headers["Content-type"] = "application/json"; 
    client.Encoding = System.Text.Encoding.UTF8; 
    client.UploadString("http://localhost:51175/Service1.svc/PostBack", "POST", jsonInput); 
} 

В клиенте убедитесь, что вы соответствуете сигнатуре вашего метода WCF, то есть объект, который вы ожидаете, является ca заполнены JSON, поэтому при вызове метода из вашего клиента отправить JSON: «значение»

Кроме того, рекомендуется использовать с помощью заявления для WebClient, чтобы обеспечить утилизацию после использования.

+0

Этот ответ правильный, я просто проверил его сам. Важно отметить, что вам нужно использовать двойные кавычки в json, а когда вы используете WebMessageBodyStyle.WrappedRequest, в этом случае ваше имя свойства в json должно соответствовать имени параметра вашего метода. –

+0

@ KennethIto спасибо за добавление информации о 'WebMessageBodyStyle.WrappedRequest' :) –

0

имя Вашего параметр метода «JSON», поэтому JSON входной параметр должен выглядеть следующим образом:

string jsonInput = "{'json':'testvalue'}"; 
Смежные вопросы