0

我正在开发一个服务器应用程序。它是在服务器机器上运行的 Windows 服务。为了与服务器服务交互,我公开了 WCF 服务。其他客户端可以通过使用 WCF 服务与服务器交互。但它限制了用户只能开发基于 windows 的系统,我们决定也公开 SOAP 服务。我正在开发同样的东西。SOAP 服务在 IIS 上运行并与 WCF 服务交互,但用户不知道 WCF 服务,他们只知道 SOAP。WCF 服务使用用户定义/复杂数据类型。当我在 SOAP 项目中使用 WCF 服务(与服务器交互)时,可以访问用户定义的类型(WCF 正在使用的类型)。我公开了一个方法并尝试访问结果,但抛出了“NetDispatcheFaultException”。有几种用户定义的类型,但产生问题的类型如下:

public class ServerConfig
{

    private List<License> _licenseConfiguration;

    public ServerConfig()
    {
        _licenseConfiguration = new List<License>();
    }

    [XmlArray("licenseconfiguration", IsNullable = true)]
    [XmlArrayItem("license", typeof(License))]
    public List<License> LicenseConfiguration { get { return _licenseConfiguration; } set { _licenseConfiguration = value; } }


    public string[] AcquiredLicenses
    {
        get
        {
            int index = 0;
            string[] licenses = new string[LicenseConfiguration.Count];
            foreach (License lic in LicenseConfiguration)
            {
                licenses[index] = Utils.GetUserFriendlyNameFor(lic.LicenseName);
                index++;
            }
            return licenses;
        }
    }       
}

public class License
{
    [XmlAttribute("licensename")]
    public LicenseTypes LicenseName { get; set; }
    [XmlAttribute("licensecount")]
    public int LicenseCount { get; set; }

    public License()
    {
        this.LicenseName = LicenseTypes.None;
        this.LicenseCount = 0;
    }
    public License(LicenseTypes licenseName)
    {
        this.LicenseName = licenseName;
        this.LicenseCount = 0;
    }
    public FbFLicense(LicenseTypes licenseName, int count)
    {
        this.LicenseName = licenseName;
        this.LicenseCount = count;
    }

}

当 SOAP 服务运行时,我调用以下方法,该方法又调用 WCF 方法:

[WebMethod]
    public ServerConfig GetServerConfiguration()
    {
        return base.ServerConfiguration();//.ServerConfiguration();
    }

在调用此方法时,一切都在 WCF 端顺利执行,但在 SOAP 端抛出以下异常:

在此处输入图像描述

为什么会这样?建议一些方法来解决这个问题。如果我删除,则此异常消失

public string[] AcquiredLicenses

来自 ServerConfig 类的属性,或者只是将返回类型从“string[]”更改为“List(string)”。任何想法?

4

1 回答 1

0

尝试设置读者配额。可能数组太大而无法反序列化。 关联

于 2013-07-12T12:56:40.907 回答