スタンドアロンアプリケーションを使用してWCF Webサービスを使用しようとしています。 Internet Explorerを使用してこのサービスを表示できます。また、Visual Studioのサービス参照を表示できます。
これは私が得ているエラーです
The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8).
これを変更して正しいコンテンツタイプを使用するにはどうすればよいですか?
ここに私の設定ファイルがあります
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="G2WebServiceSoap11Binding" />
</basicHttpBinding>
<customBinding>
<binding name="G2WebServiceSoap12Binding">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://XXX.XX.XX.XX:XX/janus/services/G2WebService.G2WebServiceHttpSoap11Endpoint/"
binding="basicHttpBinding" bindingConfiguration="G2WebServiceSoap11Binding"
contract="G2ServiceReference.G2WebServicePortType"
name="G2WebServiceHttpSoap11Endpoint" />
<endpoint address="http://XXX.XX.XX.XX:XX/janus/services/G2WebService.G2WebServiceHttpSoap12Endpoint/"
binding="customBinding" bindingConfiguration="G2WebServiceSoap12Binding"
contract="G2ServiceReference.G2WebServicePortType"
name="G2WebServiceHttpSoap12Endpoint" />
</client>
</system.serviceModel>
ここにスタックがあります
{System.ServiceModel.ProtocolException: The content type application/xml;charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly.
The first 1024 bytes of the response were: '<Exception>org.Apache.axis2.AxisFault: The endpoint reference (EPR) for the Operation not found is /janus/services/G2WebService and the WSA Action = null
at org.Apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.Java:89)
at org.Apache.axis2.engine.Phase.invoke(Phase.Java:333)
at org.Apache.axis2.engine.AxisEngine.invoke(AxisEngine.Java:264)
at org.Apache.axis2.engine.AxisEngine.receive(AxisEngine.Java:163)
at org.Apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.Java:136)
at org.Apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.Java:130)
at org.Apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.Java:829)
at org.Apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.Java:255)
at com.rm.janus.webservice.GroupCallServlet.doGet(GroupCallServlet.Java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:690)
at javax.servlet.http.HttpSer'. ---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- End of inner exception stack trace ---
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(iMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(iMessage reqMsg, iMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortType.getStudentData(getStudentDataRequest request)
at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.G2TestApp.G2ServiceReference.G2WebServicePortType.getStudentData(getStudentDataRequest request) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\InetgrisG2TestApp\Service References\G2ServiceReference\Reference.cs:line 2981
at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.getStudentData(ServiceRequest serviceReq) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\G2TestApp\Service References\G2ServiceReference\Reference.cs:line 2987
at InetgrisG2TestApp.Program.Main(String[] args) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\G2TestApp\Program.cs:line 57}
WCFサービスがHTMLを返している可能性があります。この場合、代わりにXMLを返すようにサービス側でバインディングを設定する必要があります。ただし、これはまずありません。がである場合はお知らせください。詳細を編集します。
より可能性の高い理由は、サービスがエラーをスローしており、それがHTMLエラーページを返していることです。詳細が必要な場合は、 このブログ投稿 をご覧ください。
tl; dr:エラーページにはいくつかの構成が考えられます。 IISでホストしている場合は、<httpErrors>
WCFサービスのweb.config
ファイル。そうでない場合は、サービスホスティングシナリオの詳細を入力してください。それらに合わせて編集することができます。
編集:
編集内容を確認すると、返されたエラー全体を確認できます。 Apacheは、どのサービスを呼び出すかを判断できず、そのためにエラーをスローしています。正しいエンドポイントを取得すると、サービスは正常に動作します-間違った場所を指していることになります。残念ながら、利用可能な情報からrightの場所を知ることはできませんが、アクション(現在null
!)またはURLが間違っています。
このエラーに遭遇したとき、解決策を見つけるのに何時間も費やしました。
私の問題は、ファイルを保存しようとしたときに、誤ってweb.configのキーストローク「G」を押したことです。外に座っているストラグラーキャラクターがいたので、web.configは不適切にフォーマットされたデータを解釈する方法を知りませんでした。
お役に立てれば。
WCF seriveプロジェクトでは、この問題はSystem.Web.Mvc.dllの異なるバージョンの参照が原因であるか、他のDLLの異なるバージョンの問題である可能性があります。これはDLLの異なるバージョンの互換性の問題かもしれません
使用するとき
System.Web.Mvc.dllバージョン5.2.2.-> it-throws the Errorコンテンツタイプtext/html;応答メッセージのcharset = utf-8
しかし、私が使用するとき
System.Web.Mvc.dllバージョン4.0.0.0以前->それは正常に動作します私のプロジェクトであり、エラーはありません。
このバージョンのDLLの問題の理由はわかりませんが、WCFプロジェクトと互換性のあるDLLのバージョンを変更すると、正常に動作します。
このエラーは、WCFプロジェクトに他のプロジェクトの参照を追加し、この参照プロジェクトに異なるバージョンのSystem.Web.Mvc DLLまたはその他のDLLが存在する場合でも生成されます。
IISにすべてのHTTP要求をHTTPSにリダイレクトするためにUrl Rewrite拡張機能を使用します。http:// ...アドレスでトランスポートセキュリティを使用しないサービスを呼び出そうとすると、これがエラーになります。それが現れた。
したがって、ブラウザを介してサービスのhttpアドレスとhttpsアドレスの両方にアクセスでき、303ステータスコードが自動転送されないことを確認する価値があります。
IISでWCFを閲覧してみてください。
私の場合は、WCFの物理パスの方向が間違っているためです。
これはweb.configファイルのエラーである可能性があります。
ブラウザでURLを開きます。例:
http://localhost:61277/Email.svc
500エラーがあるかどうかを確認します。
HTTP Error 500.19 - Internal Server Error
次のセクションでエラーを探します。
構成エラー
構成ファイル
私の場合、それは単にweb.configのエラーでした。
私が持っていた:
<endpoint address="http://localhost/WebService/WebOnlineService.asmx"
次のようになっているはずです。
<endpoint address="http://localhost:10593/WebService/WebOnlineService.asmx"
ポート番号(:10593)がアドレスにありませんでした。