.Net 4桌面应用程序 - Silverlight 4兼容服务

时间:2011-06-09 07:12:59

标签: .net silverlight wcf

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

如何展示Silverlight兼容服务?顺便说一句,我将获得覆盖端口80以共享XAP和crossdomain.xml(以及索引页面)的事情。我想我也可以通过这里以某种方式分享服务元数据吗?

(Silverlight 4,.Net 4)

P.S。如果您认为IIS配置位是荒谬的,您应该看看如何导入数据! :S

谢谢!

2 个答案:

答案 0 :(得分:1)

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

您也可以制作WCF REST服务 - 在这种情况下,端口应该无关紧要。通常,您根本不应在生产系统上发布服务元数据。

答案 1 :(得分:0)

对于其他任何想知道这一点的人,我只是创建了一个自托管的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并返回有效的服务。