首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。

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

Stack Overflow用户
提问于 2011-03-04 21:35:21
回答 18查看 171.5K关注 0票数 42

编辑:

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

代码语言:javascript
复制
 $("#btn12").click(function (event) {
                $.getJSON('http://localhost:3576/MyService.svc/GetCurrentUser', {},
                function (data) {
                    alert(data);
                });
                //return false;
            });

我在我的FireBug中看到了以下错误:

代码语言:javascript
复制
http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request

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

这里可能出了什么问题?

端编辑

我刚刚创建了一个新的wcf服务,当我从VS中点击f5时,我在窗口中得到了这个错误:

添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。 错误:如果这是您可以访问的Windows (R)通信基础服务,则无法从http://localhost:3696/MobileService.svc获取元数据,请检查是否已启用指定地址的元数据发布。有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455上的MSDN文档。 WS-元数据交换错误 URI:http://localhost:3696/MyService.svc 元数据包含无法解析的引用:“http://localhost:3696/MyService.svc”。在http://localhost:3696/MyService.svc没有能够接收消息的端点侦听。这通常是由不正确的地址或SOAP操作造成的。有关更多细节,请参见InnerException (如果存在)。无法连接到远程服务器。 无法连接,因为目标机器主动拒绝了127.0.0.1:3696 HTTP获取错误 URI:http://localhost:3696/MyService.svc 下载'http://localhost:3696/MyService.svc‘时出错。 无法连接到远程服务器。 无法连接,因为目标机器主动拒绝了127.0.0.1:3696

我的配置:

代码语言:javascript
复制
<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>
EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-03-04 21:42:59

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

代码语言:javascript
复制
<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>

现在,您应该能够为您的服务获取元数据。

更新: ok,所以您只是从Visual启动它--在这种情况下,它将托管在内置的服务器中。然而,只支持HTTP --您不能在绑定中使用该协议.

另外,由于您是在Cassini中托管这个,所以您的服务地址将由Cassini指定--您无需定义任何内容。

所以我的建议是:

  • 尝试使用http绑定(刚才用于测试)
  • 让这件事起作用
  • 一旦您知道它有效,就将其更改为自定义绑定,并将其保存在IIS中。

因此,我会将配置更改为:

代码语言:javascript
复制
<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>

一旦你有了它,尝试在Visual解决方案中对你的SVC文件执行一个View in Browser --如果这不起作用,你仍然会遇到一些大问题。

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

票数 39
EN

Stack Overflow用户

发布于 2013-10-26 12:10:01

如果您重命名svc文件,请确保标记是正确的。您需要修改默认配置并遵循以下步骤: 1)转到SVC文件,右键单击并选择view 2)确保后面的代码和服务指向文件和类名。

票数 18
EN

Stack Overflow用户

发布于 2014-02-17 06:04:04

FYI -您也可以从没有足够内存的机器上得到这个错误。,我在一台有16 of内存的机器上得到了这个错误。我有一个VM运行6G和许多内存密集型的应用程序。关闭一些,这个问题就解决了。

我仍然在问题的标题中出现了错误。

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

虽然在使用WCF客户端时,我确实注意到了一个关于内存的更大的消息。

希望这能帮到别人。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5199541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档