Azure WCF服务消费Azure WCF服务

4
我目前有一个包含Azure WCF服务和Windows Phone 7项目的解决方案。我可以在本地运行开发模拟器并浏览到我的服务的URL(http://127.0.0.1:81/API/V1.svc)。当我从Windows Phone应用程序中添加服务引用时,它能够正确识别该服务,但是当我尝试查看服务上的方法时,会出现错误“无法启动ASP.NET Development Server,因为端口'50149'正在使用中。”如果我点击确定,就会出现“从地址下载元数据时发生错误,请验证您输入了有效的地址。”
我不太明白为什么它会在端口50149上找到它,因为我是在端口81上进行浏览的,但我尝试使用端口81添加服务时,出现了下面的错误:
无法下载'http://localhost:81/API/V1.svc'。 无法连接到远程服务器 无法访问目标计算机,因为它积极拒绝了连接127.0.0.1:81 元数据包含一个无法解析的引用:'http://localhost:81/API/V1.svc'。 没有终结点侦听http://localhost:81/API/V1.svc 来接受消息。这通常是由于地址或SOAP操作不正确引起的。有关更多详细信息,请参见 InnerException(如果存在)。 无法连接到远程服务器 无法访问目标计算机,因为它积极拒绝了连接127.0.0.1:81 如果该服务在当前解决方案中定义,请尝试生成解决方案并重新添加服务引用。
以下是我的服务模型部分:
<system.serviceModel>
   <services>
     <service name="DocDemon.API.V1">
       <endpoint name="basicHttpBinding" binding="basicHttpBinding" contract="DocDemon.API.IV1" />
     </service>
   </services>
  <behaviors>
   <serviceBehaviors>
    <behavior name="">
     <serviceMetadata httpGetEnabled="true"  />
     <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
   <bindings>

   </bindings>
 </system.serviceModel>

我需要在这里定义一个终点吗?

这是否与WP7项目和Azure WCF在同一解决方案中有关?(在尝试从WP7应用程序添加服务引用时,是否必须运行WCF?)


你的端点配置是什么样子的?我假设你已经运行了 Dev Fabric? - Igorek
4个回答

1

我将WP7应用程序移动到了自己的解决方案中,然后当该应用程序在本地DevFabric中运行时,它能够很好地检测到Web服务。但是当它们在同一个解决方案中时,WP7应用程序就无法找到它。


0
你是否看过MSDN Code Gallery上的WCF Azure示例已知问题?其中有一个关于元数据的细微差别和行为调整需要解决。希望这能对你有所帮助。

0

如果端口未运行,则无法使用对该端口的引用,将找不到元数据。

我建议将服务器项目从Casini移动到IIS,因为在Azure平台上它将在那里运行。 我在Azure和Casini上遇到了一些问题,但在IIS上没有发生。


0
在我的运行于Azure的WCF中,我在两个地方配置终结点(我的示例在443端口上定义了一个安全的SSL终结点):
第一次是在web.config中定义终结点契约:
<system.serviceModel>
    <services>
        <service
            behaviorConfiguration="CustomValidationBehavior"
            name="ServiceName">

            <endpoint 
                                binding="wsHttpBinding"
                                bindingConfiguration="MembershipBinding"
                                name="bindingName                                   contract="InterfaceName" />

接下来,您还必须确保Azure通过ServiceDefinition.csdef公开您的服务端点:

<InputEndpoints>
  <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="CertName" />
</InputEndpoints>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接