1

コンソールアプリでセルフホスティングしているwcfサービスがあります。

サービスを実行してマシン(MyWCFRunningMachineと呼びます)にデプロイすると、[サービスを作成しました]ページに移動できます。(http:// MyWCFRunningMachine:8090 / MyService)。

ただし、wsdlページへのリンクが表示されます。そのリンクは次のようになります:http:// localhost:8090 / MyService?wsdl

そのため、そのリンクをクリックすると、MyWCFRunningMachineではなく自分のマシンを使用してサービスに接続しようとします。

wsdl(http:// MyWCFRunningMachine:8090 / MyService?wsdl)へのパスをコールドタイプすると、ブラウザーにwsdlが表示されます。しかし、サービス参照を追加しようとすると、次のエラーが発生します。

ドキュメントは理解されましたが、処理できませんでした。
-WSDLドキュメントに、解決できなかったリンクが含まれています。
-「http:// localhost:8090 / MyService?xsd=xsd0」のダウンロード中にエラーが発生しました。

これは、ローカルホストを参照するべきではない場合にも参照しています。

サービスをセルフホストするために使用しているコードは次のとおりです。

public class SelfServiceHost
{
    static string StartUpUrl {get{return "http://localhost:8090/MyService";}}
    static void Main(string[] args) { StartupService(StartUpUrl); }

    public static ServiceHost StartupService(string startUpUrl)
    {
        //+ Setup the Service
        //Create a URI to serve as the base address
        Uri httpUrl = new Uri(startUpUrl);
        //Create ServiceHost
        ServiceHost host = new ServiceHost(typeof(MyService), httpUrl);
        //Add a service endpoint
        host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), "");
        //Enable metadata exchange
        ServiceMetadataBehavior serviceMetadataBehavior =  
             new ServiceMetadataBehavior {HttpGetEnabled = true};
        host.Description.Behaviors.Add(serviceMetadataBehavior);

        //! Turn on Debug.  Remove for production!
        host.Description.Behaviors.Remove(typeof (ServiceDebugBehavior));
        ServiceDebugBehavior serviceDebugBehavior = 
            new ServiceDebugBehavior {IncludeExceptionDetailInFaults = true};
        host.Description.Behaviors.Add(serviceDebugBehavior);

        //Start the Service
        host.Open();
        Console.WriteLine("Service is hosted at " + httpUrl);
        Console.ReadLine();

        return host;
    }
}

これを取得してローカルホストを削除するにはどうすればよいですか?(注:MyWCFRunningMachineにハードコーディングすることはできません。このサービスは複数の異なるマシンで実行されます。

マシンを移動するときに変更する構成ファイルを使用する必要がありますか?(コンソールアプリ用に設定ファイルを設定したくなかったため、設定ファイルを使用していませんが、それが唯一の方法である場合は、設定します。)

4

1 に答える 1

1

マシン名を保持するために構成ファイルを使用するのは正しいと思います

"http://" + MACHINE_NAME + ":8090/MyService"

サービスがインストールされたら、構成ファイルでその値を変更し、サービスを再起動してそれを取り込みます。

于 2011-08-18T17:29:00.477 に答える