WCF服务无法正常工作

时间:2018-02-19 14:32:54

标签: wcf

我正在学习WCF,并遵循构建简单MathService的教科书。它应该作为Windows服务托管。托管部分在app.config中配置:

<system.serviceModel>
    <services>
        <service name = "MathServiceLibrary.MathService">
        </service>
    </services>

    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

部分以编程方式:

myHost = new ServiceHost(typeof(MathService));

Uri address = new Uri("http://localhost:8080/MathServiceLibrary");
WSHttpBinding binding = new WSHttpBinding();
Type contract = typeof(IBasicMath);

myHost.AddServiceEndpoint(contract, binding, address);

myHost.Open();

安装服务后,我无法启动它:

ServiceMetadataBehavior的HttpGetEnabled属性设置为true,HttpGetUrl属性是相对地址,但没有http基址。提供http基址或将HttpGetUrl设置为绝对地址。

如果我将HttpGetEnabled设置为false,我可以使用该服务,但它似乎不起作用。我无法向客户端添加服务引用,当我尝试在浏览器中打开它时,我收到错误400.

你可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:1)

可以使用带有一组基地址的ServiceHost构造函数的重载来设置基本地址 - 请参阅ServiceHost Constructor (Type, Uri[])

这样的事情:

myHost = new ServiceHost(typeof(MathService), new Uri[] { new Uri("http://localhost:8080/MathServiceLibrary") });

Uri address = new Uri("http://localhost:8080/MathServiceLibrary");
WSHttpBinding binding = new WSHttpBinding();
Type contract = typeof(IBasicMath);

myHost.AddServiceEndpoint(contract, binding, address);

myHost.Open();

上面没有经过测试,但想法是调用ServiceHost在指定的URL处设置服务,并且对AddServiceEndpoint的调用公开服务以使客户端消耗WsHttpBinding 1}}。