Windows サービスとして自己ホストされる、かなり基本的な WCF SOAP Web サービスを構築しようとしています。Windows サービス自体はマシン上で稼働しています。Visual Studio または Web ブラウザーを介してローカルにアクセスすることはできません。
関連する C# コードを以下に示します。MyDummyService
契約を実装すると仮定しますIDummyService
:
public class Program : ServiceBase
{
private ServiceHost host = null;
private readonly Uri baseAddress = new Uri("http://localhost:8000/DummyAPI");
public static readonly ILog log = LogManager.GetLogger(typeof(Program));
/// <summary>
/// The main entry point for the application.
/// </summary>
public static void Main(string[] args)
{
ServiceBase.Run(new Program());
}
public Program()
{
this.ServiceName = "DummyService";
}
protected override void OnStart(string[] args)
{
log.Info("Starting service");
try
{
base.OnStart(args);
host = new ServiceHost(typeof(MyDummyService), baseAddress);
host.Open();
}
catch (Exception ex)
{
log.Error(ex.ToString());
}
finally
{
if (host != null)
((IDisposable)host).Dispose();
}
}
protected override void OnStop()
{
log.Info("Stopping service");
base.OnStop();
host.Close();
}
}
関連app.config
:
<system.serviceModel>
<services>
<service name="DummyAPI.MyDummyService"
behaviorConfiguration="MyDummyBehavior">
<endpoint
address=""
binding="basicHttpBinding"
contract="DummyAPI.IDummyService" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyDummyBehavior">
<serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
アクセスすると
http://localhost:8000/DummyAPI
また
http://localhost:8000/DummyAPI/MyDummyService
(またはそれらの後に ?wsdl が続くもの) を Web ブラウザーで実行すると、404 が返されます。
名前web.config
空間 (または名前空間のように見えるもの) は、私を少し混乱させます。その場で安全に構成できるものと、C# クラスの名前空間を反映する必要があるものは何ですか?