編集:
web.config
を変更した後、エラーが発生しません。..新しいページ(html)を追加し、次のようなサービスを使用するためにこの小さなコードを記述します。
$("#btn12").click(function (event) {
$.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
function (data) {
alert(data);
});
//return false;
});
FireBugで次のエラーが表示されます。
http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request
注:同じwcfプロジェクトにhtmlページを追加し、プロジェクト自体を実行しているため、サービスも実行されていると想定しています...
ここで何が間違っているのでしょうか?
END EDIT
新しいwcfサービスを作成したばかりで、VSからf5を押すと、WCF Test Clientウィンドウでこのエラーが表示されます。
サービスの追加に失敗しました。サービスメタデータにアクセスできない場合があります。サービスが実行され、メタデータが公開されていることを確認してください。
エラー: http:// localhost:3696/MobileService.svc からメタデータを取得できません指定されたアドレス。メタデータの公開を有効にする方法については、MSDNドキュメントの http://go.Microsoft.com/fwlink/?LinkId=65455 を参照してください。
WS-メタデータ交換エラー
URI: http:// localhost:3696/MyService.svc
メタデータには解決できない参照が含まれています: ' http:// localhost:3696/MyService.svc '。http:// localhost:3696/MyService.svc でリッスンしているエンドポイントがなく、メッセージを受け入れることができました。多くの場合、これは誤ったアドレスまたはSOAPアクション。詳細については、InnerException(存在する場合)を参照してください。
リモートサーバーに接続できません
ターゲットマシンがアクティブに拒否したため、接続できませんでした127.0.0.1:3696
HTTP GETエラー
URI: http:// localhost:3696/MyService.svc
「 http:// localhost:3696/MyService.svc 」のダウンロード中にエラーが発生しました。
リモートサーバーに接続できません
ターゲットマシンがアクティブに拒否したため、接続できませんでした127.0.0.1:3696
私の設定:
<behaviors>
<endpointBehaviors>
<behavior name="MyService.MyService">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2812/MyService.svc" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService"
behaviorConfiguration="metadataBehavior">
<endpoint
address="http://localhost/MyService.svc"
binding="customBinding"
bindingConfiguration="jsonpBinding"
behaviorConfiguration="MyService.MyService"
contract="MyService.IMyService"/>
</service>
</services>
<bindings>
<customBinding>
<binding name="jsonpBinding">
<jsonpMessageEncoding/>
<httpTransport manualAddressing="true"/>
</binding>
</customBinding>
</bindings>
<extensions>
<bindingElementExtensions>
<add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</bindingElementExtensions>
</extensions>
サービスにメタデータ交換(mex)エンドポイントを追加する必要があります。
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="http://localhost/MyService.svc"
binding="customBinding" bindingConfiguration="jsonpBinding"
behaviorConfiguration="MyService.MyService"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
これで、サービスのメタデータを取得できるはずです
Update:わかりました。VisualStudioから起動するだけです。その場合、組み込みWebサーバーであるCassiniでホストされます。 。ただし、その獣onlyはHTTPをサポートしています-バインディングでそのプロトコルを使用していません...
また、これをCassiniでホストしているため、サービスのアドレスはCassiniによって決定されます-何も定義することはできません。
だから私の提案は次のようになります:
だから私は設定を次のように変更します:
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="" <!-- don't put anything here - Cassini will determine address -->
binding="basicHttpBinding"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
それができたら、View in Browser
Visual StudioソリューションのSVCファイルで-これが機能しない場合でも、何らかの重大な問題が残っています。
動作する場合-VSでF5を押すとサービスが起動し、 WCF Test Client app を使用して、a)Cassiniが開始したアドレスからサービスメタデータを取得できるはずです。 b)mexアドレス(Cassiniのアドレス+ /mex
)
Svcファイルの名前を変更する場合は、マークアップが正しいことを確認してください。デフォルト構成を変更し、次の手順に従う必要があります。1)SVCファイルを右クリックして、マークアップ表示を選択します。2)そのコードビハインドとサービスポイントがファイルとクラス名を修正することを確認します。
[〜#〜] fyi [〜#〜]-十分な空きメモリがないマシンでもこのエラーを取得できます。マシンでこのエラーが発生しました16ギガのメモリで実行します。私はVM 6つのギグと多くのメモリ集約型アプリで実行していました。一部を閉じて、この問題はなくなりました。
私はまだ質問のタイトルにエラーが出ました
サービスの追加に失敗しました。サービスメタデータにアクセスできない場合があります。サービスが実行され、メタデータが公開されていることを確認してください。
WCFテストクライアントの使用中に、メモリに関する大きなメッセージに気付きました。
これが他の誰かに役立つことを願っています。
公開する型の前にSerializable()
を追加します
Serializable()
Public Class YourType
Serializable
を<>
に入れます
.NET 4.0 WCFサービスを使用する場合は、Global.asaxがソースディレクトリにないことを確認してください。の場合、実行時に取得され、でコンパイルしようとします...
エンドポイントタグでBinding TypeをwsHttpbindingからbasichttpバインディングに変更し、メタデータエンドポイントタグでwsHttpbindingからmexhttpbingindingに変更すると、エラーを解決できました。ありがとうございました...
私の場合、コメントアウトで
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
web.configファイルで「サービスの追加に失敗しました。サービスのメタデータにアクセスできない可能性があります。サービスが実行され、メタデータを公開していることを確認してください」。
プロパティIsOneWay=true
は、インターフェースの操作上の契約において真である場合があります。このプロパティを削除して、このエラーを取り除きます。
残念ながら、ウェブ上で言及されたいくつかのソリューションを試しましたが、残念ながら成功しませんでした。私のプロジェクトでは、各サービスに2つのインターフェース(xml/json)があります。 mexエンドポイントの追加または構成のバインドはまったく役に立ちませんでした。しかし、*。svc.csまたは* .configファイルにフォーカスしてプロジェクトを実行している場合にのみ、このエラーが発生します。 IService.csファイルに焦点を当てて(インターフェイスが定義されている)プロジェクトを実行すると、エラーなしでサービスが追加されます。これは本当に奇妙で、私の意見では、Visual Studio 2013のバグです。複数のマシン(Windows Serverマシンでも)で同じ動作を再現しました。これが誰かを助けることを願っています。
ほとんどの場合、これはメモリ容量が少ないために発生します。最初にチェックしてから、他のトリックを試してください。