我是照倒网上的例子,写了一个例子契约[OperationContract]
string GetData();
[OperationContract]
string GetDataB();
[OperationContract]
void Ret(out string str, out string str2); //datatable
[OperationContract]
System.Data.DataTable GetDataByTable();
实例契约 public void Ret(out string str, out string str2)
{
str = "str";
str2 = "str2";
} public string GetData()
{
return string.Format("A");
} public string GetDataB()
{
return string.Format("B");
} public System.Data.DataTable GetDataByTable()
{
DataTable dt= new DataTable();
dt.Columns.Add("ss");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
dr["ss"] = "ss";
return dt;
}
客户端的契约 [ServiceContract]
public interface IWcfService
{
[OperationContract]
string GetData();
[OperationContract]
string GetDataB();
[OperationContract]
void Ret(out string str,out string str2);
[OperationContract]
System.Data.DataTable GetDataByTable();
// TODO: 在此添加您的服务操作
}//访问
IWcfService server;
private void Form1_Load(object sender, EventArgs e)
{
server = ChannelFactory<IWcfService>.CreateChannel
(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:918/WcfService"));
} private void btnA_Click(object sender, EventArgs e)
{
DataTable dt = server.GetDataByTable();
MessageBox.Show("");
} private void btnB_Click(object sender, EventArgs e)
{
string str,str2;
server.Ret(out str,out str2);
MessageBox.Show(str2);
}
其它函数都能访问,但就是返回Datatable的GetDataByTable通过断点调试确实执行了服务器GetDataByTable函数,但客户端一直在DataTable dt = server.GetDataByTable();处报错:
套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:00:59.8900000”
string GetData();
[OperationContract]
string GetDataB();
[OperationContract]
void Ret(out string str, out string str2); //datatable
[OperationContract]
System.Data.DataTable GetDataByTable();
实例契约 public void Ret(out string str, out string str2)
{
str = "str";
str2 = "str2";
} public string GetData()
{
return string.Format("A");
} public string GetDataB()
{
return string.Format("B");
} public System.Data.DataTable GetDataByTable()
{
DataTable dt= new DataTable();
dt.Columns.Add("ss");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
dr["ss"] = "ss";
return dt;
}
客户端的契约 [ServiceContract]
public interface IWcfService
{
[OperationContract]
string GetData();
[OperationContract]
string GetDataB();
[OperationContract]
void Ret(out string str,out string str2);
[OperationContract]
System.Data.DataTable GetDataByTable();
// TODO: 在此添加您的服务操作
}//访问
IWcfService server;
private void Form1_Load(object sender, EventArgs e)
{
server = ChannelFactory<IWcfService>.CreateChannel
(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:918/WcfService"));
} private void btnA_Click(object sender, EventArgs e)
{
DataTable dt = server.GetDataByTable();
MessageBox.Show("");
} private void btnB_Click(object sender, EventArgs e)
{
string str,str2;
server.Ret(out str,out str2);
MessageBox.Show(str2);
}
其它函数都能访问,但就是返回Datatable的GetDataByTable通过断点调试确实执行了服务器GetDataByTable函数,但客户端一直在DataTable dt = server.GetDataByTable();处报错:
套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:00:59.8900000”
解决方案 »
- Winista.HtmlParser.dll 怎么用
- 多线程读取文件!!!!
- 人肉搜索一篇网页,关于attribute实现缓存的
- winform中button点击如何执行webBrowser中submit的Click事件?
- Repeater 里放了一个CheckBox和一个Label
- c#SqlDataReader读取上一条记录
- 不同程序集间如何抛出异常和捕获异常?
- 在C#中使用Excel问题
- 〓〓〓如何在repeater_ItemCommand()中获得当前行的字段值?〓〓〓
- ado.ne访问access是不是比访问sqlserver慢。有什么解决方法吗?
- C#窗体如何保持在最前
- C#引用EXCEL组件
{
DataTable dt= new DataTable("temp");
dt.Columns.Add("ss");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
dr["ss"] = "ss";
return dt;
}
改成这样就行了
[DataContract]
public class ErrInfo
{
public short signErr;
public string strErr;
}
然后再客户端定义一个这样一个类,然后就返回一个ErrInfo的对象
public class ErrInfo
{
public short signErr;
public string strErr;
}然后就可以用来传入传出,不受限制,也可以添加[DataContract]说明,这个[DataContract]是对于部分不可序列化的属性的情况下,只传递部分属性而用的,当添加了[DataContract]后,每个属性或字段都要有[DataMember],不使用的则不序列化传输。