我的服务中有这个方法
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。
我能做些什么来做这些事情,我该如何解决?
答案 0 :(得分:0)
您的测试应用可能正在缓存一些错误定义Guid字段的服务元数据。
我认为你的测试应用程序也可能无法访问定义你的guid类型的模式(guid不是本机XSD类型),并且通过回退到xs:string以某种方式优雅地从中恢复,但这很遥远。
无论如何,避免这种情况的一种方法是删除测试应用中的自动生成的服务代理,并使用WCF通道堆栈直接使用服务。
var proxy = new ChannelFactory<IMyServiceContract>("<endpoint name in client config>");
var myGuid = proxy.GenerateToken(...);
如果这不符合您的想法,您是否尝试完全删除所有自动生成的代理代码并重新添加它。您确定在添加服务时指向当前版本的服务吗?