WCFサービスに問題があります。コンソールアプリケーションがあり、app.configを使用せずにサービスを使用する必要があるため、エンドポイントなどをコードで設定する必要がありました。 svcへのサービス参照はありますが、app.configを使用できません。私のコードは次のとおりです。
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8731/WcfServicio/MiServicio");
MiServicioClient svc = new MiServicioClient(binding, address);
object ob = svc.PaisesObtener();
最後の行でsvc.PaisesObtener()
を実行すると、エラーが発生します。
Content Type text/xml; charset=utf-8 was not supported by service
http://localhost:8731/WcfServicio/MiServicio. The client and service bindings may be mismatched.
最初のGoogleヒットは次のとおりです。
これは通常、クライアント/サーバーバインディングの不一致です。サービスのメッセージバージョンはSOAP 1.2(application/soap + xmlを想定)を使用し、クライアントのバージョンはSOAPを使用します。 _ 1.1(text/xmlを送信)。 WSHttpBindingはSOAP 1.2を使用し、BasicHttpBindingはSOAP 1.1を使用します。
通常、一方はwsHttpBindingで、もう一方はbasicHttpBindingのようです。
バインディング関連のコードも確認してください。だからあなたが書いた場合:
BasicHttpBinding binding = new BasicHttpBinding();
すべてのapp.config
ファイルに以下が含まれていることを確認してください
<endpoint address="..."
binding="basicHttpBinding" ...
ではない
<endpoint address="..."
binding="wsHttpBinding" ...
とか、ぐらい。
私は今日この行動を見ました
<service name="A.B.C.D" behaviorConfiguration="returnFaults">
<endpoint contract="A.B.C.ID" binding="basicHttpBinding" address=""/>
</service>
web.configから欠落していました。 service.svc
ファイルがそこにあり、提供されました。問題がそれ自体のバインディング構成にないことを認識するのに時間がかかりました...
VS2010とsvcutilの両方を使用してWCFサービスプロキシを作成しようとしたときに、今日この問題が発生しました。
私がしていることはすべてbasicHttpBinding
を使用しています(したがって、wsHttpBinding
で問題はありません)。
私の回想で初めて、MSDNは実際に次のリンクでソリューションを提供しました 方法:構成ファイルを使用してサービスのメタデータを公開する 。変更する必要がある行は、サービスapp.configファイル内のMEXサービス動作要素内の動作要素内にありました。から変更しました
<serviceMetadata httpGetEnabled="true"/>
to
<serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>
魔法のようにエラーがなくなり、サービスプロキシを作成できました。構成ファイルの代わりにコードを使用するための対応するMSDNエントリがあることに注意してください。 方法:コードを使用してサービスのメタデータを公開する
(もちろん、Policy15-どうしてそれを見落としたのでしょうか?)
もう1つの「落とし穴」:私のサービスは、それぞれが異なる契約をサポートする3つの異なるエンドポイントを公開する必要があります。作成する必要のあるプロキシごとに、他の2つのエンドポイントをコメント化する必要がありました。コメントアウトしないと、svcutilはベースURLアドレスを解決できないと文句を言います。
Channel Factoryを使用しているときに、同様の問題に直面していました。実際には、エンドポイントで指定された間違った契約が原因でした。
以下を検索してここに着陸した場合:
コンテンツタイプ 'application/json; charset = utf-8 'は期待されるタイプ' text/xmlではありません。 charset = utf-8
またはそのエラーのサブセット:
私の場合、適切な属性なしでサービスを構築して実行すると、同様のエラーが発生しました。クライアントアプリケーションでサービス参照を更新しようとすると、このエラーメッセージが表示されました。 [DataContract]
および[DataMember]
属性をカスタムクラスに正しく適用すると解決しました。
これはおそらく、サービスがセットアップされて動作していて、編集後に壊れた場合に適用されます。
繰り返しになりますが、web.configファイルで名前空間、svc名、およびコントラクトを正しく指定する必要があることを強調します。
<service name="NAMESPACE.SvcFileName">
<endpoint contract="NAMESPACE.IContractName" />
</service>
例:
<service name="MyNameSpace.FileService">
<endpoint contract="MyNameSpace.IFileService" />
</service>
(これらのサンプルでは省略された無関係なタグ)
私の場合、そのようなクライアントアプリケーションのmessageEncodingをMtomでapp.configに指定する必要がありました。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="IntegrationServiceSoap" messageEncoding="Mtom"/>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:29495/IntegrationService.asmx"
binding="basicHttpBinding" bindingConfiguration="IntegrationServiceSoap"
contract="IntegrationService.IntegrationServiceSoap" name="IntegrationServiceSoap" />
</client>
</system.serviceModel>
</configuration>
クライアントとサーバーの両方がbasicHttpBindingを使用します。これが他の人にも役立つことを願っています:)
私も最近同じ問題に直面していました。数時間苦労した後、最終的にソリューションが追加されました
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
to your SVC markup file. e.g.
ServiceHost Language="C#" Debug="true" Service="QuiznetOnline.Web.UI.WebServices.LogService"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
これで、アプリケーションを正常にコンパイルおよび実行できます。