Visual Studio で WebReference を簡単に追加する方法を知っています。
また、通常の ASP.NET Web サービス プロジェクトを作成する方法も知っていますが、ここで行っているのはそれではありません。
したがって、私が実行している WebService は次のようになります。
try
{
if (host != null)
{
host.Close();
host = null;
}
baseAddress = new Uri("http://example.com:8080");
host = new WebServiceHost(typeof(MyProxy), baseAddress);
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Opened += new EventHandler(host_Opened);
host.Closed += new EventHandler(host_Closed);
System.ServiceModel.Description.ServiceEndpoint se = host.AddServiceEndpoint(typeof(IMyProxy), new WebHttpBinding(), baseAddress);
se.Behaviors.Add(new System.ServiceModel.Description.WebHttpBehavior());
host.Open();
}
catch (Exception e)
{
}
// .... stuff ....
[ServiceContract]
public interface IMyProxy
{
[OperationContract]
[WebGet(UriTemplate = "GetArea?searchString={searchString}")]
GetAreaResult GetArea(string searchString);
}
// more stuff of course follows here
問題は、Visual Studio で上記のサービスに WebReference を追加しようとすると、エラーが発生することです。
「サービス参照の追加」->「Web 参照の追加」および URL に自分の URL、http://example.com:8080を記述します。
次に、「サービス...エンドポイントが見つかりません」というメッセージが表示されます。[Web 参照の追加] ボックスのエラー メッセージ:
「 http://example.com:8080/ 」のダウンロード中にエラーが発生しました。リクエストは HTTP ステータス 404: Not Found で失敗しました。「 http://example.com:8080/ $metadata」のダウンロード中にエラーが発生しました。リクエストは HTTP ステータス 404: Not Found で失敗しました。
Web ブラウザを開いてhttp://example.com:8080/GetAreaに直接アクセスすると、サービスが期待どおりに呼び出され、実行されます。
問題を短く言い換えると、WSDL/説明がないため、Web サービス参照を追加できません。