当前位置: 代码迷 >> Web Service >> webservice自定义结构作参数的有关问题(网下查找无相关资料)
  详细解决方案

webservice自定义结构作参数的有关问题(网下查找无相关资料)

热度:199   发布时间:2012-09-14 11:53:44.0
webservice自定义结构作参数的问题(网上查找无相关资料)
一个公共类作为结构体的类集合
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;
}
}
  相关解决方案