WCF生成所有类型的字符串

时间:2015-01-19 15:10:17

标签: c# wcf

我的服务中有这个方法

    public Guid GenerateToken(Guid application, String email, String password, String mac, String ip)
    {
        var users = new Users();
        if (users.SelectByEmail(email)?.Password != password) return Guid.Empty;

        var userTokens = new UserTokens();
        return userTokens.CreateToken(email, application, mac, ip);
    }

在我的servicecontract中使用它

    [OperationContract]
    Guid GenerateToken(Guid application, String email, String password, String mac, String ip);

然而,当我构建并查看服务xml时,我看到了这一点:

<xs:element name="GenerateToken">
    <xs:complexType>
        <xs:sequence>
            <xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="application" type="q1:guid"/>
            <xs:element minOccurs="0" name="email" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="password" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="mac" nillable="true" type="xs:string"/>
            <xs:element minOccurs="0" name="ip" nillable="true" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

当我在另一个项目中使用该服务时,它还说我必须使用字符串作为参数。它曾经工作,但我必须改变某些地方的东西,使它像它一样起作用。在过去几个小时里,我一直没能找到问题。

我的测试应用程序还说该方法的返回类型是一个字符串,而它显然是一个guid。

我能做些什么来做这些事情,我该如何解决?

1 个答案:

答案 0 :(得分:0)

您的测试应用可能正在缓存一些错误定义Guid字段的服务元数据。

我认为你的测试应用程序也可能无法访问定义你的guid类型的模式(guid不是本机XSD类型),并且通过回退到xs:string以某种方式优雅地从中恢复,但这很遥远。

无论如何,避免这种情况的一种方法是删除测试应用中的自动生成的服务代理,并使用WCF通道堆栈直接使用服务。

var proxy = new ChannelFactory<IMyServiceContract>("<endpoint name in client config>");
var myGuid = proxy.GenerateToken(...);

如果这不符合您的想法,您是否尝试完全删除所有自动生成的代理代码并重新添加它。您确定在添加服务时指向当前版本的服务吗?