1

我得到这个

HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。

尝试从我的浏览器访问服务时。这是我的配置。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>

        <services>
            <!-- Note: the service name must match the configuration name for the service implementation. -->
            <service name="WcfServiceLibrary.Service1" behaviorConfiguration="MyServiceTypeBehaviors" >
                <!-- Add the following endpoint.  -->
                <!-- Note: your service must have an http base address to add this endpoint. -->
                <endpoint contract="WcfServiceLibrary.Service1" binding="basicHttpBinding" address="http://localhost/service1" />
                <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="http://localhost/service1/mex" />
            </service>
        </services>

        <behaviors>
            <serviceBehaviors>
                <behavior name="MyServiceTypeBehaviors" >
                    <!-- Add the following element to your service behavior configuration. -->
                    <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost/service1" />
                </behavior>
            </serviceBehaviors>
        </behaviors>

    </system.serviceModel>

</configuration>

当我在 Web 浏览器中键入http://localhost/service1时,我得到 404。但是如果我删除下面的 app.config 并在后面的代码中简单地执行此操作

string serviceUrl = "http://localhost/service1";
 Uri uri = new Uri(serviceUrl);
 host = new ServiceHost(typeof(Service1), uri);
host.Open();

一切正常...有什么想法吗?看起来很简单。

4

2 回答 2

3

我认为您缺少服务下的主机元素:

<service name="WcfServiceLibrary2.Service1">
    <host>
        <baseAddresses>
            <add baseAddress = "http://localhost/service1" />
        </baseAddresses>
    </host>
    <endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary2.IService1">
        <identity>
            <dns value="localhost"/>
        </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

那么服务主机不需要URL。

    static void Main(string[] args)
    {
        var host = new ServiceHost(typeof(Service1));
        host.Open();

        Console.WriteLine("Host running");
        Console.ReadLine();
    }
于 2012-04-15T20:46:27.317 回答
0

您可以在浏览器中显示http://localhost/service1?Wsdl但 mex 仅适用于添加服务引用或 WCFTestClient (C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE),因为您将获得 HTTP Bad Request 错误来自浏览器发出 HTTP GET 请求,其中消息的内容在 HTTP 标头中,并且正文为空。

这正是 WCF mexHttpBinding 所抱怨的。

于 2012-04-16T14:53:57.273 回答