一个公共类作为结构体的类集合
public struct A1
{
public string a1;
public string a2;
}
生成dll后为A.dll
服务器端用webservice,代码如下
[WebMethod]
public bool B1(object sender)
{
try
{
A.A1 a = (A.A1)sender;
return true;
}
catch
{
return false;
}
}
客户端代码如下:
private void C1()
{
A.A1 a = new A.A1();
a.a1 = "a1";
a.a2 = "a2";
BService.B b = new BService.B();
try
{
if(b.B1(a))
{
MessageBox.Show("T");
}
else
{
MessageBox.Show("T");
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
显示的错误信息为:生成xml文档时错误
错误位置为:if(b.B1(a))
求各位大大给出解决方法。网上查找了N天了都没有相关介绍。
------解决方案--------------------
看不出问题来
------解决方案--------------------
public bool B1(A.A1 sender)
------解决方案--------------------
WebMethod]
public bool B1(A.A1 sender)
{
否则客户端无法知道参数是什么类型的,无法进行正确的marshal
------解决方案--------------------
up
------解决方案--------------------
up
------解决方案--------------------
先把结构体序列化了,wsc收到序列化串再反序列化成对象,不就行了,这种方法我用过。
另外,WebService也可以动态调用
http://blog.zhaoyu.me/archives/142.shtml
------解决方案--------------------
直接用结构体就行啦,只要不是返回的参数就不需要序列化
------解决方案--------------------
up
------解决方案--------------------
- C# code
[Serializable] public class A{ struct A1{ } }
------解决方案--------------------
直接web引用就可以得到自定义结构了,为什么还要在客户端引用
------解决方案--------------------
[WebMethod]
[XmlInclude(typeof(A.A1))]
public bool B1(object sender)
{
try
{
A.A1 a = (A.A1)sender;
return true;
}
catch
{
return false;
}
}