代码之家  ›  专栏  ›  技术社区  ›  Sarah Weinberger

WCF服务库(IIS):当前已禁用此服务的元数据发布

  •  0
  • Sarah Weinberger  · 技术社区  · 6 年前

    我收到这个错误,我不能动摇它。这个问题与 this SO 还有很多问题,更不用说页面本身了。

    是的,我完全知道 namespace service name 必须完全匹配。我现在读到了无数遍。

    我有一个WCF服务库,我正在IIS中运行。服务器是Windows server 2016标准版。我改名了 App.config Web.config 尽管我试着 App.config软件 . 我尝试了无数次的配置,但仍然是相同的错误。是的,我试着添加绑定和指定 basicHttpBinding .

    Web.Config文件

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
    
            <services>
                <service name="MyTesterLibrary.MyTester" behaviorConfiguration="MetadataBehavior">
                    <endpoint address="" binding="wsHttpBinding" contract="MyTesterLibrary.IMyTester" />
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                </service>
            </services>
    
            <behaviors>
                <serviceBehaviors>
                    <behavior name="MetadataBehavior">
                        <serviceMetadata httpGetEnabled="True"/>
                        <serviceDebug includeExceptionDetailInFaults="True" httpHelpPageEnabled="True" />
                    </behavior>
                </serviceBehaviors>
            </behaviors>
    
        </system.serviceModel>
    </configuration>
    

    主要类别

    namespace MyTesterLibrary
    {
        public class MyTester : IMyTester
        {
            public string GetVersionInfo()
            {
                Backup.GetVersionInfo(out string response);
    
                return response;
            }
        }
    }
    

    接口类

    namespace MyTesterLibrary
    {
        [ServiceContract]
        public interface IMyTester
        {
            [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/GetVersionInfo")]
            [OperationContract]
            string GetVersionInfo();
        }
    }
    

    产品服务主机.svc

    <%@ ServiceHost Service="MyTesterLibrary.MyTester" %>
    

    我按照另一个站点的说明创建了IIS站点。这张截图说明了一切。

    IIS Showing WCF website

    我知道在引用的SO文章中,这个人坚持认为问题出在IIS中,而不是IIS,但我的问题似乎是这样的。我刚试过 基本绑定 同样的。

    Browser page showing metadata for this site disabled message

    This question 在asp.net论坛上也很有趣。我本能地改名 App.config软件 Web.config配置 并重建了DLL。IIS不读取“App.config”。

    思想?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sarah Weinberger    6 年前

    最后一篇文章提到了这个问题,我的怀疑是正确的。我在这里留下这个问题,因为我写得很好,但更重要的是,一个重要的事实没有说明。

    或者 Visual Studio C# 不嵌入Web.config或IIS不从DLL中提取文件。我读过的所有文章都说要写一个SVC文件,把DLL放在bin文件中,但是都遗漏了两个关键的信息。

    1. 复制 App.config 转到“Web.config”。

    2. 放置的副本 Web.config 与SVC文件位于同一文件夹中。

    不需要刷新IIS中的网站,但必须刷新浏览器页面。

    我希望这个答案能帮助一些人,因为我真的很痛苦,几乎没有得到它。