asp.net站点中使用了“Silverlight”的“Xap页面”。现状:
    站点中添加了“启用了Silverlight的WCF服务”,用来为“Silverlight”提供数据访问。发布之后,部署在IIS6.0下,“Xap页面”中的内容就显示不出来了,已经添加了“MIME”。而在VS2010开发环境中是正常的呢?问题:请问这是为什么呢?是不是“启用了Silverlight的WCF服务”需要在“IIS6下”进行什么配置?

解决方案 »

  1.   

    显示不出来??你的MIME类型配置正确了嘛?
    还有你的网站下放置了跨域访问文件了嘛?
      

  2.   



    “MIME类型”这个没有问题。
    什么是“跨域访问文件”,好像没有?必须要放么?访问WCF如下图:

      

  3.   

    准确来讲:
      “Silverlight”访问不到部署在“IIS6”上的“WCF Servcie服务”。
      

  4.   

    不是告诉你在网站根目录下添加跨域访问文件
    clientaccesspolicy.xml
    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
        <cross-domain-access>
            <policy>
                <allow-from http-request-headers="*">
                    <domain uri="*"/>
                </allow-from>
                <grant-to>
                    <resource path="/" include-subpaths="true"/>
                </grant-to>
            </policy>
        </cross-domain-access>
    </access-policy>
    参考
      

  5.   

    <?xml version="1.0" encoding="utf-8" ?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="*">
            <domain uri="*"/>
            <domain uri="http://*"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
      

  6.   

    点击网站属性来到HTTP头,添加一些MIME类型。扩展名:.xapMIME类型:xapapplication/x-silverlight 扩展名: .xaml 
    MIME类型:application/xaml+xml
      

  7.   


    文件加上了啊,但是提示错误信息如下:网页错误详细信息用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Zune 4.7; .NET CLR 1.1.4322)
    时间戳: Sat, 24 Mar 2012 06:10:29 UTC
    消息: Unhandled Error in Silverlight Application 操作过程中出现异常,结果无效。有关异常的详细信息,请查看 InnerException。   位于 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
       位于 MyCharts.MyChartsService.GetWaterMonitoringDatasCompletedEventArgs.get_Result()
       位于 MyCharts.WaterMonitoring.client_GetWaterMonitoringDatasCompleted(Object sender, GetWaterMonitoringDatasCompletedEventArgs e)
       位于 MyCharts.MyChartsService.ChartsServiceClient.OnGetWaterMonitoringDatasCompleted(Object state)
    行: 1
    字符: 1
    代码: 0
    URI: http://10.10.233.120/Tj/Web/WaterMonitoring.aspx

      

  8.   

    那就是在Silverlight中添加WCF服务引用的服务配置文件的EndPoint有问题,贴出来看一下。因为在VS2010中利用自身的编译器生成没有问题,但是发布到IIS上,要让其他机器能访问到,还是需要设置一下配置文件的。
      

  9.   


    Client客户端:<configuration>
        <system.serviceModel>
            <bindings>
                <customBinding>
                    <binding name="CustomBinding_ChartsService">
                        <binaryMessageEncoding />
                        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                    </binding>
                    <binding name="CustomBinding_ChartsService1">
                        <binaryMessageEncoding />
                        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                    </binding>
                </customBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:2686/Mycems.UI/ChartsService.svc"
                    binding="customBinding" bindingConfiguration="CustomBinding_ChartsService"
                    contract="ChartsService.ChartsService" name="CustomBinding_ChartsService" />
                <endpoint address="http://localhost:4707/Mycems.UI/ChartsService.svc"
                    binding="customBinding" bindingConfiguration="CustomBinding_ChartsService1"
                    contract="MyChartsService.ChartsService" name="CustomBinding_ChartsService1" />
            </client>
        </system.serviceModel>
    </configuration>
      

  10.   

    服务器端(Web.config):
     <behaviors>
       <serviceBehaviors>
        <behavior name="">
         <serviceMetadata httpGetEnabled="true" />
         <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
       </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
       multipleSiteBindingsEnabled="true" />
      <services>
       <service name="ChartsService">
        <endpoint address="" binding="customBinding" bindingConfiguration="ChartsService.customBinding0"
         contract="ChartsService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
       </service>
      </services>
      <bindings>
       <basicHttpBinding>
        <binding name="WeatherWebServiceSoap" closeTimeout="00:01:00"
         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
         messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
         <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
         <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None"
           realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
         </security>
        </binding>
       </basicHttpBinding>
       <customBinding>
        <binding name="WeatherWebServiceSoap12">
         <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
          messageVersion="Soap12" writeEncoding="utf-8">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
           maxBytesPerRead="4096" maxNameTableCharCount="16384" />
         </textMessageEncoding>
         <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
          maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
          bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
          keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
          realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
          useDefaultWebProxy="true" />
        </binding>
        <binding name="ChartsService.customBinding0">
         <binaryMessageEncoding />
         <httpTransport />
        </binding>
       </customBinding>
      </bindings>谢谢你,万分感激。
      

  11.   

    根目录下又放置了“crossdomain.xml”文件:<?xml version="1.0" ?>  
    <cross-domain-policy>
      <allow-access-from domain="*" />  
      <site-control permitted-cross-domain-policies="all" />  
      <allow-http-request-headers-from domain="*" headers="*" />  
    </cross-domain-policy>但是还是报错,信息如下:
    网页错误详细信息用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Zune 4.7; .NET CLR 1.1.4322)
    时间戳: Sat, 24 Mar 2012 09:13:32 UTC
    消息: Unhandled Error in Silverlight Application 操作过程中出现异常,结果无效。有关异常的详细信息,请查看 InnerException。   位于 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
       位于 MyCharts.MyChartsService.GetWaterMonitoringDatasCompletedEventArgs.get_Result()
       位于 MyCharts.WaterMonitoring.client_GetWaterMonitoringDatasCompleted(Object sender, GetWaterMonitoringDatasCompletedEventArgs e)
       位于 MyCharts.MyChartsService.ChartsServiceClient.OnGetWaterMonitoringDatasCompleted(Object state)
    行: 1
    字符: 1
    代码: 0
    URI: http://10.10.233.120/Tj/Web/WaterMonitoring.aspx
      

  12.   

    修改你的 http://localhost:4707/Mycems.UI/ChartsService.svc 这个 url 地址。访问silverlight所在的网站,根本不用添加跨域 xml 文件。如果你想动态产生访问wcf的这个地址,而不是每一次部署到网站都手工修改url,那么访问wcf的时候、new客户端代理对象的时候,使用那个有着2个参数的实例化方法(而不是无参数实例化方法),其第二个参数就是服务的url。你可以使用 Application.Host.Source获得网站地址,然后添加上后边的svc文件。
      

  13.   

    你的silverlgiht程序不存在跨域问题。去搞那个会白白耽误时间。silverlight自己访问自己xap文件所在的网站,是不需要跨域文件的。想知道是否需要跨域文件,你只要使用一个http调试工具看一下你的浏览器端的http访问,看看在sivlerlight通过浏览器去访问svc文件之前有没有首先去下载跨域文件就行了。同样地,你也可以看出这个svc文件路径的问题,你可以看出它根本不指向你的IIs6.0的网站。
      

  14.   


    使用调试工具去看http通讯过程。它是非常精简的,要比你去看高层次的那些网页啊、文档啊,来的简单。只要看一下你启动网页之后的几个浏览器请求消息,你就知道它访问哪里去了,就知道是哪里造成的了。所以,使用调试工具。会不会不在于编程本身,而在于你是否将测试进行得比较充分了。
      

  15.   


    嗯。谢谢您。string weburl = Application.Current.Host.Source.ToString();
                weburl = weburl.Substring(0, (weburl.Length - 23)) + "/ChartsService.svc";
                MyChartsService.ChartsServiceClient client = new MyChartsService.ChartsServiceClient("CustomBinding_ChartsService1", weburl);这样写就好了。
    但是还想再请教下,跨域到底指的是什么?
    “clientaccesspolicy.xml”和“crossdomain.xml”分别有什么作用?
      

  16.   

    “clientaccesspolicy.xml”和“crossdomain.xml”分别有什么作用?