[英]How to return an Object with an Object Property from a WCF Service?
我有一组Web服务方法,它们返回一个具有以下属性的ActionResult类:
object returnValue
bool success
string message
returnValue用于根据所使用的Web方法保存不同类型的返回值。
我在客户端上遇到的问题是,如果Web方法在returnValue中返回内部类,则由于客户端无法识别类型,我无法进行强制转换。
我可以使用一些方法来公开我需要的类“问题”。
例如:
Issue ExposeIssueType()
{
return null;
}
但是没有其他办法了吗?
在等待您对我的评论的回答时,我将告诉您这是一个非常糟糕的Web服务设计。 每个Web服务操作都应返回要返回的数据。 创建一个可以容纳所有可能的返回值的类是没有意义的。
此外,您不应使用字符串消息从Web服务返回错误。 为此,SOAP协议具有“ SOAP Fault”机制。
由于使用的是WCF,因此您对SOAP Faults有完整的支持。 例:
在服务合同中:
[FaultContract(typeof(GeneralFault))]
[OperationContract]
int Divide(int a, int b);
在服务中:
public int Divide(int a, int b)
{
if (b == 0)
{
throw new FaultException<GeneralFault>(
new GeneralFault {Message = "Attempt to divide by zero"});
}
return a / b; // Note - operation can focus on its job
}
故障中返回的数据的数据协定:
[DataContract]
public class GeneralFault
{
[DataMember]
public string Message {get;set;}
}
在共享的DLL中创建您的类型(将其标记为Serializable),并参考导线的两侧。
在Web服务上,拥有object
值绝不是一个好主意。 当您只有xml(或类似文件)时,它怎么有机会?
您可以使用多个子类尝试一些技巧。 不确定这是否是个好主意。
您不能在Web方法签名中使用对象,因为它不能像您所想的那样简单地进行序列化。 您可以做的是使用通用类型:
public class ActionResult<T>
{
public T returnValue
public bool success
public string message
}
然后您的网络方法应返回ActionResult<Issue>
要解决对注释和(不合理!)-1的关注,请运行并调用。
[WebMethod]
public object example()
{
return new foo
{
bar = "bar",
baz = "baz"
};
}
public class foo
{
public string bar { get; set; }
public string baz { get; set; }
}
结果:
System.InvalidOperationException:生成XML文档时出错。 ---> System.InvalidOperationException:预期的类型为Test + foo。 使用XmlInclude或SoapInclude属性可以指定静态未知的类型。
换句话说,您必须指定所有可以返回的非原始类型,这与您要实现的目标几乎是矛盾的。
我已经更改了有关可序列化性的原始主张。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.