2011-06-09 139 views
0

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

如何公开兼容Silverlight的服务?顺便说一下,我将获得覆盖端口80的内容以共享XAP和crossdomain.xml(以及索引页)。我想我会明智地通过这里分享服务元数据吗?

(Silverlight 4,.Net 4)

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

谢谢!

+0

为什么你会“随机猜测变化”?当然,阅读手册并做出明智的选择会更好吗? – AnthonyWJones 2011-06-09 07:34:21

+0

@AnthonyWJones我无法准确获得关于他们使用的网络或机器配置的大量细节。这就是为什么。 – 2011-06-09 07:38:04

回答

0

对于其他人想知道这件事,我只是创建了一个自托管的WCF服务。在搜索引擎上做了一个好点,甚至在这里。

这里就是我虽然谈论的一个样本:从在VS2010网上画廊自托管服务样本

<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> 

这个例子是半复制。

的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并返回一个有效的。

1

我已经在Silverlight的Windows服务中使用了net.tcp WCF服务。但是,这可以起到一定的作用(请参阅here)。

你也可以创建一个WCF REST服务 - 在这种情况下,端口应该没关系。一般而言,您不应该在生产系统上发布服务元数据。

+0

你有一些有效的点,但你没有真正回答这个问题。 – 2011-06-12 13:53:24

+0

那么,我的答案是:只要公开一个WCF服务,正如你通常所做的那样 - 如果它是一个NET.TCP服务,请介意有效的端口。有关在Windows服务中托管WCF服务的说明,请参阅http://msdn.microsoft.com/en-us/library/ms734781.aspx - 与WPF,控制台或WinForms应用程序相同的工作。 – 2011-06-14 09:47:47

+0

好,但我仍然会用我的答案,因为它更彻底。感谢这个答案,但我编辑。 – 2011-06-15 04:58:06