Silverlight在Windows服务中自托管的WCF跨域问题

时间:2012-08-29 14:43:13

标签: c# wcf silverlight cross-domain self-hosting

我有一个在我的本地计算机上运行完美的Silverlight应用程序,从开发服务器(在Windows服务中自托管)中使用WCF服务。

我必须调试其中一个WCF服务,以便找到错误的根本原因。我在服务中添加了调试/跟踪信息,并安装在虚拟机中(甚至在本地),但从那时起,我得到了众所周知的跨域错误:

  

“尝试向URI发出请求时发生错误   的 'http:// MyVMMachine:4096 /为MyService'。这可能是由于尝试   在没有适当的情况下以跨域方式访问服务   适当的跨域策略,或不适合SOAP的策略   服务。您可能需要联系服务所有者进行发布   跨域策略文件,并确保它允许与SOAP相关的HTTP   要发送的标头。使用内部也可能导致此错误   Web服务代理中的类型,而不使用   InternalsVisibleToAttribute属性。请查看内部异常   了解更多详情。“

这很奇怪,因为如果从开发服务器消费,它可以正常工作,但如果在开发机器中安装服务,甚至在本地(在Windows服务中自托管),它也不起作用。

以下是服务原始代码:

public partial class WindowsService : ServiceBase
{
    ServiceHost _Host;

    public WindowsService()
    {
        try
        {
            InitializeComponent();
        }
        catch (Exception exc)
        {
            Server.One.Log("Windows service initialization failed: " + exc.Message);
        }
    }

    protected override void OnStart(string[] args)
    {
        try
        {
            Server.One.Start();
            _Host = new ServiceHost(typeof(Service));
            _Host.Open();
        }
        catch (Exception exc)
        {
            Server.One.Log("Windows service start failed: " + exc.Message);
        }
    }

    protected override void OnStop()
    {
        try
        {
            if (_Host != null)
                _Host.Close();
            Server.One.Stop();
        }
        catch (Exception exc)
        {
            Server.One.Log("Windows service stop failed: " + exc.Message);
        }
    }
}

在阅读Carlos Figueira's article关于此主题后,我改变了应用他的方法的服务,但仍然没有工作。

任何想法???

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用fiddler查看您的应用程序在哪里真正要求您提供服务。

这种情况发生在我身上几次,通常是因为服务器端口更改8 - )

只需将ServiceReferences.ClientConfig更改为服务器端口。

查看您的服务项目配置(Web选项卡),如果要在那里调用,请将特定端口设置为4096:

enter image description here