【问题标题】:.Net 4 Desktop App - Silverlight 4 Compatible Service.Net 4 桌面应用程序 - Silverlight 4 兼容服务
【发布时间】:2011-06-09 07:12:59
【问题描述】:

我正在为以特定方式管理数据的客户创建一个系统。 (它的作用与我的问题无关)。该环境似乎推荐了一个基于 silverlight 的解决方案,(许多可能的客户端)但是在可访问的服务器上运行 IIS 可能会很棘手,甚至可能由于限制而不可能,并且由于我实际上无法访问系统来进行更改到 web.config,如果我确实设置了它。 (我必须提供一个并希望它有效,如果没有,随机猜测变化)。所以我试图将服务器端的东西构建到一个 .Net 4 (WPF) 应用程序中,并从那里公开与 Silverlight 兼容的 WCF 服务。

如何公开与 silverlight 兼容的服务?顺便说一句,我将覆盖端口 80 以共享 XAP 和 crossdomain.xml(以及一个索引页面)。我想我也应该以某种方式通过这里共享服务元数据?

(Silverlight 4,.Net 4)

附:如果您认为 IIS 配置位很可笑,您应该看看数据是如何导入的! :S

谢谢!

【问题讨论】:

  • 你为什么要“随机猜测变化”?阅读手册并做出明智的选择肯定会更好吗?
  • @AnthonyWJones 我无法准确获得有关他们使用的网络或机器配置的大量详细信息。这就是为什么。

标签: .net silverlight wcf


【解决方案1】:

我在 Silverlight 的 Windows 服务中使用了 net.tcp WCF 服务。这可行,但是,您应该确保使用特定的端口范围(请参阅here)。

您还可以创建 WCF REST-Service - 在这种情况下,端口应该无关紧要。一般来说,您根本不应该在生产系统上发布服务元数据。

【讨论】:

  • 你有一些正确的观点,但你没有真正回答问题。
  • 好吧,我的回答是:像往常一样公开 WCF 服务 - 如果它是 NET.TCP 服务,请注意有效端口。有关在 Windows 服务中托管 WCF 服务的说明,请参阅 msdn.microsoft.com/en-us/library/ms734781.aspx - WPF、控制台或 WinForms 应用程序同样适用。
  • 很好,但我仍然会使用我的答案,因为它更彻底。不过感谢您的回答,我 +'ed。
【解决方案2】:

对于其他对此感到疑惑的人,我只是创建了一个自托管的 WCF 服务。这是一个很好的谷歌搜索点,甚至在这里。

以下是我所说的示例:

<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="BinaryHTTP">
                <binaryMessageEncoding/>
                <httpTransport/>
            </binding>
        </customBinding>
    </bindings>
    <services>
        <service name="MyServiceClassName" behaviorConfiguration="ServiceBehaviour">
            <endpoint binding="customBinding" bindingConfiguration="BinaryHTTP"
                 name="MainService" contract="BaseNamespace.IMyService"
                 address="MyService"/>
            <endpoint address="" behaviorConfiguration="webHttpEnablingBehavior"
                  binding="webHttpBinding" contract="BaseNamespace.IClientAccessPolicy" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:80/" />
                </baseAddresses>
            </host>
        </service>
    </services>

    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehaviour">
                                    <!-- Enables public metadata, good for Add Service Reference in SL -->
                <serviceMetadata httpGetEnabled="True"/>
                                    <!-- Turn this off at the production level. -->
                <serviceDebug includeExceptionDetailInFaults="True"/>
            </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
            <behavior name="webHttpEnablingBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>

    </behaviors>

</system.serviceModel>

此示例半复制自 VS2010 在线库中的自托管服务示例。

IClientAccessPolicy 接口:

Imports System.ServiceModel
Imports System.ServiceModel.web

<ServiceContract()> _
Public Interface IClientAccessPolicy

    <OperationContract(), WebGet(UriTemplate:="/clientaccesspolicy.xml")> _
    Function GetPolicy() As IO.Stream

End Interface

希望您应该能够遵循这一点。只需确保您的核心服务继承 IClientAccessPolicy 并返回一个有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多