2011-12-05 8 views
2

私のメソッドをAjax経由で呼び出すには、次のサービス設定を追加しました。ユニットテスト/クライアントプロキシ作成のためのWebサービスがなくなりました

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="webHttpBehavior"> 
       <webHttp /> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name=""> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
      <behavior name="ServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <webHttpBinding> 
      <binding name="webHttpXDomain" crossDomainScriptAccessEnabled="true" /> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="My.Service.AccountService"> 
      <endpoint address="" behaviorConfiguration="webHttpBehavior" 
       binding="webHttpBinding" bindingConfiguration="webHttpXDomain" 
       name="Scripting" contract="My.Service.ServiceContracts.IAccountService" /> 
     </service> 
    </services> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

しかし、今、私はWCFテストクライアントを使用するか、私のユニットテストを実行しようとすると、それには、エンドポイントのリスニングは述べていないか、何を思い付きます。 ajaxクライアントは正常に動作しています。

+0

で記述されています。 –

+0

これは設定ファイルのかなり完全なセクションのようです。あなたの編集の前にどうなったのですか? –

+0

もう一度削除/追加することは役に立ちません。編集する前に在庫があった。 .NET 4では、サービスエンドポイントに対して何も指定しません。デフォルトのweb.configユニットテストを使用する/プロキシが生成されました – ryan

答えて

0

私は、WCFテストクライアントと単体テストに必要な石鹸メタデータを発行するための追加エンドポイントを追加しました。

セットアップと同様の質問は、あなたのサービス参照を削除してみてください、その後、再びそれを追加REST/SOAP endpoints for a WCF service

0

following link for your test setupを参照してください。特に記事の最後のポイント。

Get this wrong and you will get the following error: 

System.InvalidOperationException : Service ‘Test.SomeDir.FooService’ has zero application (non-infrastructure) endpoints. 

2. Note the end point address ‘abc’. 

1 
<endpoint address="abc" 
This need to map to the path the immediately follows the base host address in your URL; 

http://localhost:1980/abc 

Hope this helps. I find writing a test like this useful for testing my end points and making sure I’ve got everything setup. 
1

ここでの問題は、webHttpBindingがSOAPバインディングではないことです。これは実際にRESTサービス用に設計されており、webHttpBindingがデフォルトでメタデータを公開する方法はありません(これはWCFテストクライアントの問題を説明しています)。

あなたがwebHttpBindingsについて、ここでより完全な答えを見つけることができます:ユニットテスト用としてhttp://social.msdn.microsoft.com/forums/en-US/wcf/thread/deabd25b-a219-4e95-9826-d40dc2f75543

(それはより多くの統合テストのような私には聞こえるが)、あなたはテストメソッドのための具体的なセットアップを持っている必要があります:

[TestMethod()] 
[HostType("ASP.NET")] 
[AspNetDevelopmentServerHost("%PathToWebRoot%\\VSProjects", "/VSProjects")] 
[UrlToTest("http://localhost/VSProjects")] 
public void MethodToTest() 
{ 
} 

詳細情報:すべてのRESTのhttp://msdn.microsoft.com/en-us/library/ms243399.aspx

2

まず、私はあなたがこのように呼び出すことができるとは思わない。だから、メタデータを公開していません。

第2に、単体テストでは、本当にクライアント呼び出しのように呼び出す必要がありますか?単体テストプロジェクトを作成してサーバー側だけをテストしてみませんか?

プロジェクトでAzureとモバイルクライアントを使用し、VSテストプロジェクトでユニットテストを成功させるのと同じシナリオです。

負荷テストの場合はい。クライアントからの呼び出しをシミュレートする必要があります。

+0

私は加入者のようにクライアントを使わずに正確なテストをしていません。たぶんそれは私だけです – ryan

+0

実際のシナリオでは、VSTS2010で利用可能なWebテストを使用することができます。 URLリクエストを記録するだけで、後でもっと多くの仮想的な用途を作成することができます。 –

関連する問題