Silverlight应用程序如何连接到现有的WCF服务?

时间:2011-12-06 18:12:05

标签: silverlight wcf wcf-ria-services

我有一个WPF客户端,它连接到一个非常简单的ISS应用程序上的WCF端点。我想将Silverlight应用程序连接到同一个WCF服务。我已经读过我必须启用OData。 4这仍然是必要的吗?如果是这样,我该怎么办?我如何实际连接端点?我是否需要使用RIA服务来促进连接?我可以使用相同的IIS应用程序来提供两个端点吗?

提前感谢您的帮助。这个让我很难过。

编辑:

以下是我的WCF服务和Silverlight客户端的配置。

WCF服务器配置(模糊处理):

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding maxReceivedMessageSize="2147483647">
                <security mode="Transport">
                    <transport clientCredentialType="None"/>
                </security>
            </binding>
        </wsHttpBinding>
        <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647">
                <security mode="Transport">
                    <transport clientCredentialType="None"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <services>
        <service name="MyNamespace.Services.MyService">
            <endpoint contract="MyNamespace.ServiceContracts.IMyService"
                      address=""
                      binding="wsHttpBinding"
                      />
            <endpoint contract="MyNamespace.ServiceContracts.IMyService"
                      address="basic"
                      binding="basicHttpBinding"
                      />
            <endpoint contract="IMetadataExchange"
                      address="mex"
                      binding="mexHttpBinding"
                      />
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="True" />
                <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Silverlight客户端配置(模糊处理):

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="Binding.Secure" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
                <security mode="Transport" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>

        <endpoint name="MyServiceReferenceNamespace.MyService"
                  contract="MyServiceReferenceNamespace.IMyService"
                  address="https://www.mydomain.com/MyVirtualDirectory/MyContract.svc"
                  binding="basicHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />

</system.serviceModel>

(名称已更改以保护我的客户。)

2 个答案:

答案 0 :(得分:3)

您无需启用OData;只要现有服务中的端点使用与Silverlight兼容的绑定(例如,BasicHttpBinding),SL应用程序就可以像使用WPF一样使用它。如果绑定不兼容,则可以向服务添加新端点(是的,它可以位于同一IIS应用程序中),SL应用程序可以使用该端点。

在您的SL项目中,您可以选择“添加服务引用”,这将在该项目中创建一个知道如何与WCF服务“对话”的代理。

答案 1 :(得分:1)

最佳信息可在此MSDN文章中找到:Accessing Web Services in Silverlight

Silverlight是否与WCF服务托管在同一个IIS上?如果没有,您应该阅读:Making a Service Available Across Domains Boundaries