【问题标题】:Self hosted wcf service on azure vm windows serverazure vm windows 服务器上的自托管 wcf 服务
【发布时间】:2014-12-16 09:46:45
【问题描述】:

我有带有 udp 绑定的 wcf 服务(WCF 4.5 中的新功能),我正在尝试将它托管在 Azure 上的 Windows Server 2012 上。

我在 Azure 上为我需要的端口(39901;它适用于 HTTP:80,我可以看到 IIS 网站)进行了端点映射,并且我允许该端口的防火墙中的所有流量。 但我仍然无法在网络浏览器中获取 wsdl。

这是控制台应用程序的 app.config:

<configuration>
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceThrottling maxConcurrentCalls="12" maxConcurrentInstances="56" maxConcurrentSessions="12" />
                <useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="ServerService.UdpServiceAlpha">
            <endpoint address="soap.udp://localhost:8091" binding="udpBinding" contract="ServerService.IUdpServiceAlpha" />
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:39901/SelfServerHost/" />
                </baseAddresses>
            </host>
        </service>
    </services>
    <protocolMapping>
        <add binding="udpBinding" scheme="soap.udp" />
    </protocolMapping>
    <bindings>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>

对于本地主机,一切正常...我是这方面的新手(天蓝色,Windows 服务器部署),我在 stackoverflow 或其他任何地方尝试了很多想法。但还是不行。

有什么想法吗?

编辑1:

<services>
        <service name="ServerService.UdpServiceAlpha" behaviorConfiguration="UdpServiceAlpha.Behavior">

            <endpoint address="/" binding="udpBinding" contract="ServerService.IUdpServiceAlpha"/>
            <endpoint address="/" binding="webHttpBinding" contract="ServerService.IUdpServiceAlpha"/>
            <host>
                <baseAddresses>
                    <add baseAddress="http://xxx.cloudapp.net:39901/SelfServerHost/" />
                    <add baseAddress="soap.udp://xxx.cloudapp.net:39901/SelfServerHost/" />
                </baseAddresses>
            </host>
        </service>
    </services>

【问题讨论】:

  • 我不完全确定,但我相信应该通过一些属性“ServiceDescription”或类似的设置为元数据 URL。
  • @Codor ...我该怎么处理它?哪个 URL 元数据? ...您有一些如何正确设置的示例吗?

标签: c# wcf azure windows-server-2012 self-hosting


【解决方案1】:

尝试将 Azure VM Endpoint 公共端口从 39901 更改为 443!

大量的系统管理员和 ISP 阻止所有传出端口,只允许少数(传出端口白名单)。 80 和 443 端口通常不会被阻塞,因为它通常是 HTTP 流量。

仅更改 VM 端点的公共端口。保留私有端口 - 39901。

【讨论】:

  • 喜欢this? ...没有变化...这里是test
  • 是的,就像显示的配置一样。现在绑定 - 它仅绑定到 localhost,它将服务绑定到 127.0.0.1,multipleSiteBindings 对于 IIS Hosted SVC 以及当此 IIS 中的网站配置有多个绑定时可以正常工作。您必须将其他地址(即您的 XXX.cloudapp.net)添加到端点:msdn.microsoft.com/en-us/library/ms733749(v=vs.110).aspx
  • 好的...我更改了它,...我不知道它是否正确...显示在已编辑的问题 EDIT1 中...但仍然无法正常工作
【解决方案2】:

您的配置文件似乎有一些问题:

服务行为缺少名称:

  <serviceBehaviors>
        <behavior name="my.service.behavior"> ...

服务需要体现绑定配置

<service name="ServerService.UdpServiceAlpha" behaviorConfiguration=" my.service.behavior ">

【讨论】:

  • 谢谢,...已更改,但在这种情况下没有帮助。
【解决方案3】:

是的,终于……找到了解决方案。我的朋友(网络大佬 :))告诉我端口通信是如何工作的……想法很简单:“再次检查服务器和客户端防火墙端口”,这里是“客户端防火墙”这一点。

我只允许服务器防火墙端口,但应该允许客户端通信。在客户端 PC 中添加 TCP/UDP 出站规则,它可以神奇地工作。

...对于 UDP,我需要更改 TTL(默认为 1)。

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 2011-05-17
    • 2013-08-06
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多