2012-12-09 17 views
1

我创建了返回dataTable的webservices方法。 不过,我得到的错误:WCF基础连接返回DataTable时出错

The underlying connection was closed: The connection was closed unexpectedly

这是我在IWS方法文件

[ServiceContract] 
public interface IWsBabyCare 
{ 
    [OperationContract] 
    DataTable GetPurchaseOrderDetails(); 

    [OperationContract] 
    DataTable GetPurchaseOrders(int PODID); 

    } 

这是我在WS文件

public DataTable GetPurchaseOrderDetails() 
{ 
    DataTable POD = new DataTable("POD"); 
    PurchaseOrderBLL prodBLL = new PurchaseOrderBLL(); 
    POD = prodBLL.GetPOD(); 
    POD.TableName = "POD"; 
    return POD; 

} 

public DataTable GetPurchaseOrders(int PODID) 
{ 
    PurchaseOrderBLL prodBLL = new PurchaseOrderBLL(); 
    return prodBLL.GetPurchaseOrders(PODID); 
} 

我在网上读法为数据表添加一个名字将有所帮助,但我只是返回一个空的dataTable。

+2

哪里是您的数据访问代码(.Get的)?您是如何解决连接问题的? – viperguynaz

+0

您不应该从服务操作中返回DataTable的类型。看到这里:http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx –

+0

你最终发现了问题吗? –

回答

0

你得到的例外可以有大约500 different causes

我们现在可以真正了解的是,您有一个服务接口来定义一些操作,并且您已经实现了这些操作。

我们对托管服务的方式(控制台,IIS?)或服务和客户端上指定的WCF配置一无所知。您需要在您的问题中提供这些信息。

此外,您的服务操作指定返回类型DataTable这是一个big Web服务no-no。你应该通过它定义正是你需要的数据类型(例如,如果你的数据库表中包含的苹果,你应该通过的List<Apple>返回类型。

这是我的建议,你应该继续进行。

  1. 创建一个基于控制台的服务和客户端项目。
  2. 创建它返回一些原始类型像字符串的单个服务操作。
  3. 使所有的代码尽可能简单,你应该能够得到这个不到10个代码行以及每个服务和约10行xml配置客户。
  4. 一旦你设法得到这个工作,然后逐渐添加新的操作和更复杂的返回类型。