无法添加服务.可能无法访问服务元数据.确保您的服务正在运行并公开元数据

Nic*_*ahn 37 wcf web-services

编辑:

在我修改了之后web.config,我没有得到错误,这是好的....然后我添加一个新页面(html)并编写这个小代码来使用这样的服务:

 $("#btn12").click(function (event) {
                $.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
                function (data) {
                    alert(data);
                });
                //return false;
            });
Run Code Online (Sandbox Code Playgroud)

我在FireBug中看到以下错误:

http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request
Run Code Online (Sandbox Code Playgroud)

注意:我在同一个wcf项目中添加了html页面并自行运行项目,所以我假设服务也在运行...

这可能有什么问题?

结束编辑

我刚刚创建了一个新的wcf服务,当我从VS点击f5时,我在WCF测试客户端窗口中收到此错误:

无法添加服务.可能无法访问服务元数据.确保您的服务正在运行并公开元数据.

错误:无法从http:// localhost:3696/MobileService.svc获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布.有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455上的MSDN文档.

WS-Metadata Exchange错误
URI:http:// localhost:3696/MyService.svc
元数据包含无法解析的引用:' http:// localhost:3696/MyService.svc '.

http:// localhost:3696/MyService.svc上没有可以接受该消息的端点.这通常是由错误的地址或SOAP操作引起的.有关更多详细信息,请参阅InnerException(如果存在).

无法连接到远程服务器无法建立连接,
因为目标计算机主动拒绝它127.0.0.1:3696
HTTP GET错误
URI:http:// localhost:3696/MyService.svc
下载' http://时出错localhost:3696/MyService.svc '.
无法连接到远程服务器无法建立连接,
因为目标计算机主动拒绝它127.0.0.1:3696

我的配置:

<behaviors>
    <endpointBehaviors>
        <behavior name="MyService.MyService">
            <webHttp/>
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="metadataBehavior">
            <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2812/MyService.svc" />
        </behavior>
    </serviceBehaviors>
</behaviors>
<services>
    <service name="MyService.MyService" 
             behaviorConfiguration="metadataBehavior">
        <endpoint 
            address="http://localhost/MyService.svc" 
            binding="customBinding"
            bindingConfiguration="jsonpBinding" 
            behaviorConfiguration="MyService.MyService"
            contract="MyService.IMyService"/>
    </service>
</services>
<bindings>
    <customBinding>
        <binding name="jsonpBinding">
            <jsonpMessageEncoding/>
            <httpTransport manualAddressing="true"/>
        </binding>
    </customBinding>
</bindings>
<extensions>
    <bindingElementExtensions>
        <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </bindingElementExtensions>
</extensions>
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 35

您需要向服务添加元数据交换(mex)端点:

<services>
   <service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
      <endpoint 
          address="http://localhost/MyService.svc" 
          binding="customBinding" bindingConfiguration="jsonpBinding" 
          behaviorConfiguration="MyService.MyService"
          contract="MyService.IMyService"/>
      <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange"/>
   </service>
</services>
Run Code Online (Sandbox Code Playgroud)

现在,您应该能够获得服务的元数据

更新:好的,所以你只是从Visual Studio中启动它 - 在这种情况下,它将托管在内置的Web服务器Cassini中.然而,这只野兽支持HTTP - 你没有在绑定中使用该协议......

此外,由于您在Cassini中托管此服务,因此您的服务地址将由Cassini决定 - 您无法定义任何内容.

所以我的建议是:

  • 尝试使用http绑定(刚才用于测试)
  • 让这个工作
  • 一旦你知道它的工作原理,将其更改为自定义绑定并将其托管在IIS中

所以我会将配置更改为:

<behaviors>
   <serviceBehaviors>
      <behavior name="metadataBehavior">
         <serviceMetadata httpGetEnabled="true" />
      </behavior>
   </serviceBehaviors>
</behaviors>
<services>
   <service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
      <endpoint 
          address=""   <!-- don't put anything here - Cassini will determine address -->
          binding="basicHttpBinding" 
          contract="MyService.IMyService"/>
      <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange"/>
   </service>
</services>
Run Code Online (Sandbox Code Playgroud)

完成后,尝试View in Browser在Visual Studio解决方案中对SVC文件执行操作- 如果这不起作用,则仍然存在某种主要问题.

如果它有效 - 现在您可以在VS中按F5并且您的服务应该出现,并且使用WCF测试客户端应用程序,您应该能够从a)Cassini开始服务的地址获取服务元数据,或者b) mex地址(卡西尼号地址+ /mex)


小智 16

如果您重命名svc文件,请确保您的标记是正确的.您无需修改​​默认配置并按照以下步骤操作:1)转到SVC文件,右键单击并选择查看标记2)确保后面的代码和服务指向更正文件和类名.


Tom*_*kel 7

仅供参考 - 您也可以从没有足够内存的机器上获得此错误. 我在一台运行16台机器的机器上出现了这个错误.我有一个运行6个演出的VM和很多内存密集型应用程序.关闭一些,这个问题就消失了.

我仍然在问题的标题中得到了错误

无法添加服务.可能无法访问服务元数据.确保您的服务正在运行并公开元数据

在使用WCF测试客户端时,我确实注意到有关内存的更大消息.

希望这有助于其他人.

  • 一个小小的补充:WCF需要至少15%的可用内存才能启动.我有同样的问题,花了我差不多一个小时才发现.:( (3认同)

小智 7

就我而言,我收到此错误是因为未启用该选项 (HttpActivation)。 显示 .NET Framework 4.6 高级服务下 WCF 服务下的 HTTP 激活的 Windows 功能对话框