none
IIS部署silverlight + wcf 项目,搞了三天了没搞定呀! RRS feed

  • 问题

  • web项目包含两个东西,wcf(silverlight enabled wcf) 和silverlight的xap。

    如果web项目不放在iis上,只用vs08浏览的话,可以调取wcf返回的数据。

    如果web项目上iis上就出问题了,具体错误:

    throw new Error("Unhandled Error in Silverlight Application 操作过程中出现异常,结果无效。有关异常的详细信息,请查看 InnerException。   位于 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()\n   位于 SilverlightApplication1.ServiceReference1.DoWorkCompletedEventArgs.get_Result()\n   位于 SilverlightApplication1.MainPage.c_DoWorkCompleted(Object sender, DoWorkCompletedEventArgs e)\n   位于 SilverlightApplication1.ServiceReference1.Service1Client.OnDoWorkCompleted(Object state)");

    前几天用webservice做也出现同样的情况。

    我的wcf里的方法很简单的,就一个测试:

     [OperationContract]
     public string DoWork()
    {
        // Add your operation implementation here
         return "aaaaaaaaaaaaaaaaaaaaa";
    }

    PS: silverlight调用wcf没错,因为不在IIS下没错误,一定是IIS部署的问题。

    三天了还没搞定。下了一个Silverlight Deployment Guide v2
    全英的,搞不定呀。


    视别人的帮助为恩赐~
    2009年7月20日 3:56

答案

  • 我新建sl项目的时候,建web site,而不是web app。问题就没有了,不过仍旧是没找到问题的根源。
    视别人的帮助为恩赐~
    • 已标记为答案 woodynet 2009年7月27日 10:17
    2009年7月27日 10:16

全部回复

  • 看看有没有跨域的问题
    2009年7月20日 6:12
  • iis上加跨域访问策略
    clientaccesspolicy.xml

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

    放在网站站点的根目录下


    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月20日 6:24
    版主
  • 你没有配置wcf
    如果是iis7  在Windows组件里添加wcf组件
    是iis7之前版本参考http://www.cnblogs.com/kugou123/archive/2009/02/12/667482.html

    2009年7月20日 6:30
  • iis上加跨域访问策略
    clientaccesspolicy.xml
    __________________________________

    谢谢熊哥,http://localhost/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>
    内容也不错,为什么还有问题呀。

    另外,我好像没涉及到跨域的问题吧,都在一个web项目里呀。

    视别人的帮助为恩赐~
    2009年7月20日 7:47
  • http://localhost/wcfTest1/Service1.svc?wsdl

    我的wcf都可以浏览呀,为什么仍旧不行呢??
    视别人的帮助为恩赐~
    2009年7月20日 8:35
  • 你没有配置wcf
    如果是iis7  在Windows组件里添加wcf组件
    是iis7之前版本参考http://www.cnblogs.com/kugou123/archive/2009/02/12/667482.html


    我的是xp系统,用的是IIS 5.1版本。

    你说的在Windows组件里添加wcf组件 ,这个需要吗?

    视别人的帮助为恩赐~
    2009年7月20日 8:36
  • 你没有配置wcf
    如果是iis7  在Windows组件里添加wcf组件
    是iis7之前版本参考http://www.cnblogs.com/kugou123/archive/2009/02/12/667482.html


    那个参考,我都照上边做了呀。
    视别人的帮助为恩赐~
    2009年7月20日 8:36
  • 那是vista的iis7操作 你不是就忽略
    你的问题的原因 iis不认svc扩展名而已
    这个http://www.cnblogs.com/stswordman/archive/2007/03/15/669420.html 或者http://msdn.microsoft.com/zh-cn/library/aa751792.aspx比较清楚一些  照第二步就行了 其他忽略
    2009年7月20日 9:20
  • http://images.cnblogs.com/cnblogs_com/stswordman/enablesvc.PNG

    这步也有呀,我没配置就已经有了,就不需要修改了。

    视别人的帮助为恩赐~
    2009年7月20日 9:38
  • 郁闷死了~~~~~~~~~
    视别人的帮助为恩赐~
    2009年7月20日 9:38
  • 奇怪了 你先用asp.net 测试wcf能不能用
    如果能 那就是wcf绑定地址错了
    2009年7月20日 9:41
  • 郁闷死了~~~~~~~~~
    视别人的帮助为恩赐~
    你是不是直接就把sl项目部署上去了,没改这个文件: ServiceReferences.ClientConfig WCF配置信息在这里
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月20日 9:59
    版主
  • <configuration>
        <system.serviceModel>
            <bindings>
                <customBinding>
                    <binding name="CustomBinding_Service11">
                        <binaryMessageEncoding />
                        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                    </binding>
                </customBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost/wcfTest1/Service1.svc" binding="customBinding"
                    bindingConfiguration="CustomBinding_Service11" contract="ServiceReference2.Service1"
                    name="CustomBinding_Service11" />
            </client>
        </system.serviceModel>
    </configuration>
    ServiceReferences.ClientConfig



    这个文件还需要改什么吗?
    视别人的帮助为恩赐~
    2009年7月20日 10:08
  • 奇怪了 你先用asp.net 测试wcf能不能用
    如果能 那就是wcf绑定地址错了
    web项目包含两个东西,wcf(silverlight enabled wcf) 和silverlight的xap。

    如果web项目不放在iis上,只用vs08浏览的话,可以调取wcf返回的数据。

    如果web项目上iis上就出问题了,

    视别人的帮助为恩赐~
    2009年7月20日 10:37
  • CustomBinding_Service11 这个设置不对

    检查你Web.Config中WCF设置,Silverlight只支持basicHttpBinding的WCF通信

    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月20日 10:56
    版主
  • CustomBinding_Service11 这个设置不对

    检查你Web.Config中WCF设置,Silverlight只支持basicHttpBinding的WCF通信

    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”

    熊哥,我修改了这个设置,还是不行。不过我好像发现问题的根源了。

    我大致说下我的项目。

    一个解决方案下,有两个项目。
    1,sl的项目。
    2,web application(包含一个sl enabled wcf和xap(上边sl项目的包))

    项目很简单,不会涉及到代码的错误。wcf里返回一个字符串,在sl的xaml里接收。显示出来。

    我现在发现问题了:
    如果在解决方案下,以web  application的方式打开这个web项目,就没有错误。
    如果在解决方案下,以web site的方式打开这个web项目,就会出现这个错误。包括配置到IIS里,以IIS的方式加载到解决方案里这个web项目,也仍旧是web site的打开方式,
                               因此也会出现这个错误。
    ——————————————————————————

    熊哥,你知道是什么问题吗??
    难道silverlight只支持web application吗?

    视别人的帮助为恩赐~
    2009年7月21日 2:14
  • 关注中。。。。
    顺便说说我的问题:
    无法加载配置中指定的 X.509 证书标识
    InvalidOperationException: 无法加载配置中指定的 X.509 证书标识。]
    ServiceActivationException: 由于编译过程中出现异常,无法激活服务“/fabu2.Web/Service.svc”。异常消息为: 无法加载配置中指定的 X.509 证书标识。。]
    2009年7月21日 2:30
  • 你好,
    从你的描述来判断,你是用了预编译的web site导致WCF部署到IIS上后不能使用。
    请参考我在这个case中的回复(http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?query=Mixing+precompilled+website+with+WCF+services&dg=&cat=en_US_d02fc761-3f6b-402c-82f6-ba1a8875c1a7&lang=en&cr=&pt=&catlist=&dglist=&ptlist=&exp=&sloc=en-us),提到了四种解决办法:

    使用Web Application
    发布时勾选Allow this precompiled site to be updatable
    Tom的解决方案(以及Web Setup Project自动完成更改):
    http://social.msdn.microsoft.com/forums/en-US/wcf/thread/8c897f8e-2143-450e-a9f4-97d1f8702da7/


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月21日 6:04
    版主
  • 谢谢呀,很多如雷贯耳的高人。

    不过还是没解决呀。

    我的不是“发布”呀,我仅仅就部署在IIS下了,还没发布呢。

    Allen Chen ,谢谢你,不过你的方法我还是没搞懂。
     

    视别人的帮助为恩赐~
    2009年7月21日 7:13
  • 我发现了一个地方,你看看
    http://weblogs.asp.net/mschwarz/archive/2008/03/07/silverlight-2-not-working-on-production-web-server.aspx
    这些我都做了呀。加两个mimi类型。
    视别人的帮助为恩赐~
    2009年7月21日 7:14
  • 谢谢呀,很多如雷贯耳的高人。

    不过还是没解决呀。

    我的不是“发布”呀,我仅仅就部署在IIS下了,还没发布呢。

    Allen Chen ,谢谢你,不过你的方法我还是没搞懂。
     

    视别人的帮助为恩赐~

    那可能是我猜测错了。请问你说的部署是什么意思,是直接把所有文件copy到wwwroot下还是用Publish Web Site的方法?
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月21日 7:28
    版主
  • Allen Chen,我看了tom 的那个 找他说的吧 web。config文件里面的 <assemblies> 列表组 删除调,结果,在vs下 浏览Service1.svc,都报错了.
    这是为什么呢
    2009年7月21日 7:38
  • Allen Chen,我看了tom 的那个 找他说的吧 web。config文件里面的 <assemblies> 列表组 删除调,结果,在vs下 浏览Service1.svc,都报错了.
    这是为什么呢

    你好,
    请问你遇到的是禁止更新预编译web site publish后WCF不能正常工作的问题吗? Tom的解决方案是手动更改Service.svc.compile文件
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月21日 7:43
    版主

  • 那可能是我猜测错了。请问你说的部署是什么意思,是直接把所有文件copy到wwwroot下还是用Publish Web Site的方法?
    谢谢Allen Chen兄,我部署IIS的方法 =》 不是把源代码拷贝到 wwwroot 下。

    是在iis里“默认网站”里创建一个“虚拟目录”,这个目录的位置指向我那个项目的位置就可以了,例如我的项目在E:\wcfTest1.

    但是“默认网站”的总目录没改变,仍旧是那个wwwroot文件夹。

    视别人的帮助为恩赐~
    2009年7月22日 1:02
  • 你好,

    我再确认一下这个问题:

    1. Web Application里的WCF调用没有问题(无论是用IIS还是ASP.NET Development Server),Web Site里的WCF在使用IIS的时候发生错误,而用ASP.NET Development Server的话正常工作。
    2. 无论使用Web Application还是Web Site, 无论是用IIS还是ASP.NET Development Server,.svc都能通过浏览器正常访问。
    3. 非跨域调用WCF。

    请看一下上面的总结是否正确。另外请提供当前Web Site的WCF配置信息以及Silverlight的ClientConfig信息。
    最后请测试一下用一般的Console程序调用Web Site下的WCF是否能够成功。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月22日 1:52
    版主
  • 谢谢Allen Chen兄。我已经确定以下几点。

    一,vs08以Web Application方式打开web项目的时候,里的WCF调用没有问题。

    二,vs08以Web site方式打开web项目的时候,里的WCF调用,就会有问题。

    三,把这个web项目部署到iis下的时候,在iis下浏览那个页面,调用wcf也会出问题。

    四,vs08打开iis下的这个web项目,也会出问题。因为vs08打开iis下的项目,也是以web stie方式打开的。
         (ASP.NET Development Server打开web,也出问题)

    五,ASP.NET Development Server。抱歉,我不是太明白这个什么意思。
          (哦,我明白了,是在vs下浏览web项目,而不放在iis下)

    六,任何情况下,打开svc都可以正常浏览。http://根据环境不同这里也不一样/Service1.svc

    七,我不太明白跨域是什么意思。但我已经把那两个跨域的文件放iis根目录下了。仍旧不行。
         我在vs08里创建了一个sl app,一个web app。wcf放在web app里了。这样没跨域吧。

    八,在iis该项目里加两个mimi类型,加了,也不行。

    哎,反正是谷歌百度里能搜索到的相关解决办法,我都试验了。

    <system.serviceModel>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="SilverlightApplication1.Web.Service1Behavior">
                        <serviceMetadata httpGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                    </behavior>
                </serviceBehaviors>
            </behaviors>
            <bindings>
                <customBinding>
                    <binding name="customBinding0">
                        <binaryMessageEncoding />
                        <httpTransport />
                    </binding>
                </customBinding>
            </bindings>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
            <services>
                <service behaviorConfiguration="SilverlightApplication1.Web.Service1Behavior"
                    name="SilverlightApplication1.Web.Service1">
                    <endpoint address="" binding="customBinding" bindingConfiguration="customBinding0"
                        contract="SilverlightApplication1.Web.Service1" />
                    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                </service>
            </services>
        </system.serviceModel>
    <configuration>
        <system.serviceModel>
            <bindings>
                <customBinding>
                    <binding name="CustomBinding_Service1">
                        <binaryMessageEncoding />
                        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                    </binding>
                </customBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:8888/Service1.svc" binding="customBinding"
                    bindingConfiguration="CustomBinding_Service1" contract="ServiceReference1.Service1"
                    name="CustomBinding_Service1" />
    <!-- address 如果放iis下,我就把这个值改变了。改变成从IIS下浏览svc的路径http://localhost/wcftest/Service1.svc ,仍旧不行 -->
    <!-- bindingConfiguration 之前忘记哪位高人告诉说说,改成web.config下的bindingConfiguration的值,改customBinding0,也不行 --> </client> </system.serviceModel> </configuration>

    还有,我的语法十分简单,不会有代码方面的错误,请看代码:
    svc的代码:
     [OperationContract]
            public string DoWork()
            {
                // Add your operation implementation here
                return "ssssssssssss";
            }

    sl app代码:

    public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
    
                ServiceReference1.Service1Client c = new SilverlightApplication1.ServiceReference1.Service1Client();
    
                c.DoWorkCompleted += new EventHandler<SilverlightApplication1.ServiceReference1.DoWorkCompletedEventArgs>(c_DoWorkCompleted);
                c.DoWorkAsync();//代码编译过了,代码是没问题的。
            }
    
            void c_DoWorkCompleted(object sender, SilverlightApplication1.ServiceReference1.DoWorkCompletedEventArgs e)
            {
                string s = e.Result;//跟踪了,当出现错误的时候,就是进不来这里。
                HtmlPage.Window.Alert(s);
            }
        }

    ————————————————————————————————
    因为我创建的wcf是silverlight enabled wcf,因此在非sl项目里没法用。
    我创建一般wcf,我在其他项目里,例如Console里试试,我现在就去做,马上告诉你结果。再次感谢。


    视别人的帮助为恩赐~
    • 已编辑 woodynet 2009年7月22日 4:40
    2009年7月22日 3:36
  • 有个重大发下(我下边提及的wcf,无论是一般wcf,还有sl eanbled wcf 效果是一样的)。

    一,用vs创建的web app(例如项目名叫“webAppNotSite”)里添加wcf,可以正常浏览http://localhost:4382/WebApplication1/Service.svc

    二,用vs以web site的方式打开项目“webAppNotSite”,添加wcf,也可以正常浏览。

    三,用vs创建web stie添加wcf,无法正常浏览,错误信息如下:

     

    “/SilverlightApplication1.Web”应用程序中的服务器错误。

    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as 'Allowed' or 'Required'. 


         
    视别人的帮助为恩赐~
    2009年7月22日 5:00
  • 有个重大发下(我下边提及的wcf,无论是一般wcf,还有sl eanbled wcf 效果是一样的)。

    一,用vs创建的web app(例如项目名叫“webAppNotSite”)里添加wcf,可以正常浏览http://localhost:4382/WebApplication1/Service.svc

    二,用vs以web site的方式打开项目“webAppNotSite”,添加wcf,也可以正常浏览。

    三,用vs创建web stie添加wcf,无法正常浏览,错误信息如下:

     

    “/SilverlightApplication1.Web”应用程序中的服务器错误。

    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as 'Allowed' or 'Required'. 


         
    视别人的帮助为恩赐~

    在Service类上加个Attribute再看看:

    [

    AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]

    public

     

    class Service : IService

    {


    但是这个似乎不是你前面描述的问题吧,前面你不是说.svc都能正常访问吗?


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月22日 6:39
    版主
  • 对了,把你的 实体、DataContract 帖一段代码出来看看。
    2009年7月22日 11:48
  • 请不要把一个简单问题搞的太过复杂

    首先确保你这个WCF部署到IIS下能浏览

    然后新建Silverlight项目,直接引用你IIS下的这个WCF

    如果引用不成功
    1.可能是跨域问题
    2.也可能是你WCF传输模式配置问题

    如果引用成功,编译通过

    那么比对你ServiceReferences.ClientConfig 这跟之前项目的配置有何不同,也可以直接把这个项目考过去即可执行.


    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月22日 13:40
    版主
  • 目前,我的问题是,站点里面 的dll 文件 点击右键不能下载,这表明。。。。?
    2009年7月22日 14:32
  • 首先,确认Webservice工作正常,尝试更新服务器端的Webservice调用; 然后,检查ServiceReferences.ClientConfig文件,确认你的endpoint地址是当前你的webservice地址。 XML code 如果发布到IIS,需要修改地址,不能用随机端口,否则调用Webservice会失败。 通常来说,IIS无法调用WCF是因为在IIS没有注册成功造成的。
    2009年7月22日 16:29
  • 目前,我的问题是,站点里面 的dll 文件 点击右键不能下载,这表明。。。。?

    dll默认就是不能下载的,你做asp.net网站,结果人家把你编译的网站的dll下载,再反编了,那得多不安全
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月22日 16:36
    版主
  • 帖子越长了,问题还是没有解决,那位大侠帮忙写个简单的 有wcf 的项目,哪怕是返回一个字符串的,让我们菜鸟下载来,模仿一下

    随便说一下silverlight 的dll 不下载,你怎么用阿。
    ServiceReferences.ClientConfig里面
    是部署 iis 的 http://localhost/fabu2/myService.svc
    还是 vs的 http://localhost:1054/myService.svc
    楼楼上没说清楚

    2009年7月23日 1:08
  • 这里有几个小例子
    建立和发布silverlight 项目
     
    http://www.slblogger.cn/p58.htm

    Silverlight + WCF

    http://www.slblogger.cn/p80.htm
    2009年7月23日 5:48
  • 大水牛兄弟跟woodynet什么关系啊,我觉得是你们两个一起问乱了,且说得不是又不像同一件事情,如果还需要提问其他问题,最好令开帖子
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月23日 8:42
    版主
  • 艾,惭愧阿,说来说去还是 一个 wcf 发不到iis 上面的问题,熊哥,能不能给俺们菜鸟做个最简单的例子,让俺们瞻仰一下~
    就从一张数据库表,最后从iis 上面读出来
    2009年7月23日 9:34
  • 网上很多例子很简单 不会用?
    我怀疑楼主系统是否有问题 我看先重新安装一遍系统 试试
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月23日 10:27
  • 你加我QQ 283440946 加我,谢谢!让我远程到你机器上试试!
    我的http://bookgame.net 都可以使用
    要不我写一个示例给你,看你能不能使用
    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年7月23日 12:57
    版主
  • OK了吧!呵呵! ^_^加油!
    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年7月24日 2:03
    版主
  • 我ok了,等等发给楼主ok 一下^_^
    2009年7月24日 2:16
  • 纳闷了,为什么天使坠在我机器上能搞定。我一操作就出问题呢。

    哎,仍旧是没找到问题的根源呀~~


    视别人的帮助为恩赐~
    2009年7月24日 9:52
  • 艾,不容易,搞过来,搞过去,结果 最终解决办法就是在数据库连接串 把用户名,密码加上,数据就通过iis出来了,
    艾。。。。。。。。。。。我狂汗
    2009年7月25日 2:26
  • 艾,不容易,搞过来,搞过去,结果 最终解决办法就是在数据库连接串 把用户名,密码加上,数据就通过iis出来了,
    艾。。。。。。。。。。。我狂汗

    这是常识 用习惯vs  忘了iis怎么用了
    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年7月25日 6:59
  • 水牛,我压根就没用数据库呀。数据库连接串密码没啥关系呀。
    视别人的帮助为恩赐~
    2009年7月27日 1:06
  • 晚上回家帮你继续弄!兄弟,不要放弃!(那天机器出了问题!后来上不了网。)
    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年7月27日 1:39
    版主
  • 呵呵 是不是都出来了, 这个帖子貌似可以结了。。。
    2009年7月27日 8:54
  • 你的问题解决了?


    努力!写一个js解析器,一个svg插件,一个绘图程序,做好自己,呵呵~!
    2009年7月27日 9:01
    版主
  • 我新建sl项目的时候,建web site,而不是web app。问题就没有了,不过仍旧是没找到问题的根源。
    视别人的帮助为恩赐~
    • 已标记为答案 woodynet 2009年7月27日 10:17
    2009年7月27日 10:16