2011-01-08 18 views
3

servicehostコンストラクタでベースアドレスを指定せずにサービスを作成しました。 を呼び出し、AddServiceEndpointメソッドを呼び出してホストにエンドポイントを追加します。 AddServiceEndpointメソッドでは、私はサービスの完全なアドレスを提供しています。クライアントプロキシでは、呼び出しが失敗しました。「http://localhost:8000/Test/TestServiceでリッスンしているエンドポイントがメッセージを受け入れることができませんでした。これは、不正なアドレスまたはSOAPアクションによって引き起こされることがよくあります。詳細については、InnerExceptionを参照してください。 は、以下のServiceHostのサンプルコードとクライアントのプロキシクライアントが自己ホスト型WCFサービスに接続できないBaseAddressなしで開始

using (ServiceHost host = new ServiceHost(typeof(Test.TestService))) 
{ 
    host.AddServiceEndpoint(typeof(Test.ITestService), 
    new BasicHttpBinding(), "http://localhost:8000/Test/TestService"); 
    Console.ReadLine(); 
    host.Close(); 
} 

クライアントプロキシです:

EndpointAddress ep = new EndpointAddress("http://localhost:8000/Test/TestService"); 
ITestService proxy = ChannelFactory<ITestService>.CreateChannel(new BasicHttpBinding(), ep); 
string s = proxy.HelloWorld(); 

私はproxy.Helloworldが失敗すると例外が来る呼び出しライン。

しかし、ベースアドレスでServicehostを作成すると、すべて正常に動作しているようです。 は、私がservicehostコンストラクタのベースアドレスを提供するコードです。

using (ServiceHost host = new ServiceHost(typeof(Test.TestService),new Uri("http://localhost:8000/Test"))) 
{ 
    host.AddServiceEndpoint(typeof(Test.ITestService), 
    new BasicHttpBinding(), "/TestService"); 
    Console.ReadLine(); 
    host.Close(); 
} 

ここで間違っていることは誰でも答えることができますか? : マイオペレーション契約は以下の通りです:

[ServiceContract]public interface ITestService 
{ 
    [OperationContract] 
    string HelloWorld(); 
} 
public class TestService: ITestService 
{ 
    public string HelloWorld() 
    { 
     return "Hello World"; 
    } 

} 

問題がある、私はすべての設定ファイルを使用していないときは午前、すべてが正常に動作しますが、私はベースアドレスを提供していないときのServiceHostコンストラクタ内のベースアドレスを提供servicehostコンストラクタで、AddServicepointメソッドの完全なuriを指定すると例外が発生します。

答えて

3

あなたが疑問に示すコードスニペットのいずれかで

host.Open();

を呼び出すことはありませんので、私はそれらのいずれかが動作するように期待していません。

問題を引き起こしているコードとまったく同じコードを投稿してもよろしいですか?

+0

それは私の質問に答えました。私はホストを呼んでいませんでした。例外が来る理由は2番目のアプローチで開きます。どうもありがとう。 – abcd

+0

+1良い点:) –

関連する問題