我正在尝试构建一个自行托管为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),我得到了404.显而易见的第一个问题:我上面有什么问题?
web.config
名称空间(或看起来像命名空间)让我有点困惑。我可以安全地在现场制作什么,以及需要反映C#类命名空间的内容?
答案 0 :(得分:5)
看起来您正在使用Start方法处理服务主机,这有效地使您无需运行ServiceHost。
finally
{
if (host != null)
((IDisposable)host).Dispose();
}
答案 1 :(得分:0)
好的引物是Configuring Services Using Configuration Files。
service元素的name属性必须是实现服务的类型的完全限定名称。
endpoint元素上的contract属性必须是服务实现的接口的完全限定名称。
如果满足这两个条件,那么ServiceHost应该找到并应用app config中指定的配置。
如果您不熟悉WCF,一种简单的入门方法是使用WCF服务配置编辑器,该编辑器可从Visual Studio的工具菜单中获得。