前提・実現したいこと
C#にてjsonのデータをPostで送信するWCFサービスA、
WCFサービスAからPOSTで送られてきたjsonのデータを受信する
WCFサービスBを作成しています。
WCFサービスAから送ったjsonのデータをもとに、WCFサービスBで処理を実行し、
WCFサービスBからサービスAにjsonの文字列を返す
ということが行いたいです。
発生している問題・エラーメッセージ
現在作成したWCFサービスに対して、
webClient.UploadString(WCFサービスBのuri,"POST",jsonの文字列)
で実行を行った際に
リモートサーバーがエラーを返しました:(415) Cannot Process the message because the content type 'application/octet-stream' was not the expected type 'multipart/related; type="application/xop+xml"'.
のエラーが発生します。
また該当の.svcファイルをブラウザーで表示した場合には
HTTP 400 正しくない要求
Webページが見つかりません
が発生します。
対処法をどなたか教えていただけませんでしょうか?
該当のソースコード
ネットに接続できないPCのソースを見ながら打ってるので若干ミスがあるかもしれません。
(後インデントが省略気味です)
またクラス名や一部メソッド名は都合上変更してあります。
C#
1 2WCFサービスAから呼ばれているクラスXXXA.csの中身 3Public Class XXXXA 4{ 5 //送信箇所 6 private string PostForService(string serviceName, string jsonContent) 7 { 8 var webClient = new WebClient(); 9 10 var uri = new Uri(serviceName); 11 12 webClient.Headers["HttpRequestHeader.ContentType"] = "application/Json"; 13 webClient.Headers["HttpRequestHeader.Accept"] = "application/Json"; 14 webClient.Encoding = Encoding.UTF8; 15 16 // ここでエラー発生 17 // uriの内容:http://localhost:50080/TestAccess/TestService.svc/JsonTest 18 // jsonContentの内容:{"品種ID":"ITEMID00001_1"} 19 var response = webClient.UploadString(uri, "POST", jsonContent); 20 21 return response; 22 } 23} 24 25//TestService.svcの中身(マークアップ) 26<%@ ServiceHost Language="C#" Debug="true" Service="AAAA.BBBB.WCFServiceForB.TestAccess.TestService" CodeBehind="TestService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory") 27 28//TestService.svc.csの中身 29Public Class TestService : Interface.ITestService 30{ 31 //受信側 32 public string JsonTest(string jsonContent) 33 { 34 //疎通確認がしたい段階なので現在はまだ中身なし 35 var ret = ""; 36 return ret; 37 } 38} 39 40//ITestService.csの中身 41[OperationContract] 42[WebInvoke(Method = "POST", 43 RequestFormat = WebMessageFormat.Json 44 ResponseFormat = WebMessageFormat.Json 45 UriTemplate = "JsonTest" 46 BodyStyle = WebMessageBodyStyle.Wrapped 47)] 48string JsonTest(string jsonContent); 49 50//WCFサービスBのWeb.Configの一部(関係してそうな箇所) 51//(手打ちなので一部のみ) 52 53<system.serviceModel> 54 <services> 55 <service name="AAAA.BBBB.WcfServiceForB.TestAccess.TestService"> 56 <endpoint address="TestService" 57 binding="webHttpBinding" behaviorConfiguration="web" contract="AAAA.BBBB.WcfServiceForB.TestAccess.Interface.ITestService"/> 58 <endpoint address="" 59 binding="basicHttpBinding" contract="AAAA.BBBB.WcfServiceForB.TestAccess.Interface.ITestService"/> 60 </service> 61</services> 62 <bindings> 63 <basicHttpBinding> 64 <binding messageEncoding="Mtom" 65 maxBufferPoolSize="2147473647" 66 maxBufferSize="2147473647" 67 maxReceivedMessageSize="2147473647" > 68 <readerQuotas maxDepth="64" maxStringContentLength="2147473647" maxArrayLength="2147473647" maxBytesPerRead="2147473647" maxNameTableCharCount="2147473647" /> 69 </binding> 70 </basicHttpBinding> 71 </bindings> 72 <behaviors> 73 <endpointBehaviors> 74 <behavior name="web"> 75 <webHttp /> 76 <behavior> 77 </endpointBehaviors> 78 <serviceBehaviors> 79 <behavior> 80 <serviceMetadata httpGetEnabled="true" /> 81 <serviceDebug includeExceptionDetailInFaults="false" /> 82 <dataContractSerializer maxItemsInObjectGraph="10000000" /> 83 </behavior> 84 </serviceBehaviors> 85 </behaviors> 86 <serviceHostingEnviroment multipleSiteBindingsEnabled="true" /> 87 </system.serviceModel> 88 <system.webServer> 89 <modules runAllManagedModulesForAllRequests="true" /> 90 <directoryBrowse enabled="true" /> 91 </system.webServer> 92
試したこと
検索した結果、
最初はマークアップにFactory="System.ServiceModel.Activation.WebServiceHostFactory"がなかったので、追加した。
(ただし問題は解決せず)
補足情報(FW/ツールのバージョンなど)
・VisualStudio 2010
・.NetFramework 4.0
・C#
回答2件
あなたの回答
tips
プレビュー