コンソールアプリでセルフホスティングしている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にハードコーディングすることはできません。このサービスは複数の異なるマシンで実行されます。
マシンを移動するときに変更する構成ファイルを使用する必要がありますか?(コンソールアプリ用に設定ファイルを設定したくなかったため、設定ファイルを使用していませんが、それが唯一の方法である場合は、設定します。)