Asp.net 使用SOAP wcf Web服务检索对象列表

Asp.net 使用SOAP wcf Web服务检索对象列表,asp.net,wcf,web-services,soap,dotnetopenauth,Asp.net,Wcf,Web Services,Soap,Dotnetopenauth,我目前正在构建一个通过DotNetOpenAuth库进行身份验证的web服务。为此,我在IIS7服务器上创建了两个站点,一个是消费者,另一个是提供商和实际的Web服务。顺便说一句,我目前正在本地调试消费者项目,但最终我将切换到单独IIS7站点上的消费者项目 每一个项目的单独实施就像一个魅力,然而,当我把它们联系在一起时,我遇到了一个问题 Web服务从使用者调用,并返回我自己编写的类的列表时间表。然而,每当我测试代码时,Web服务都可以正常工作,生成一个包含大约300个项目的列表,但是当消费者收到

我目前正在构建一个通过DotNetOpenAuth库进行身份验证的web服务。为此,我在IIS7服务器上创建了两个站点,一个是消费者,另一个是提供商和实际的Web服务。顺便说一句,我目前正在本地调试消费者项目,但最终我将切换到单独IIS7站点上的消费者项目

每一个项目的单独实施就像一个魅力,然而,当我把它们联系在一起时,我遇到了一个问题

Web服务从使用者调用,并返回我自己编写的类的列表时间表。然而,每当我测试代码时,Web服务都可以正常工作,生成一个包含大约300个项目的列表,但是当消费者收到该列表时,该列表突然计数为0

我相信这可能是因为webservice和consumer是分开的项目;消费者项目不知道时间表类,因为它只存在于服务提供商项目中,所以在消费者项目中,我尝试使用列表来存储列表,这显然不起作用。但是我不知道我应该用什么来代替

想法

编辑:根据要求,我添加了来自使用者和提供者的最重要的方法。请注意,其中大多数与DotNetOpenAuth示例几乎相同—以这种方式检索字符串或“列表”非常有效

消费者调查方法 SampleWcf.aspx.cs

类内数据客户端

提供程序中的方法 类内DataApi.cs


您能否展示一些代码,说明如何在使用者和提供者上实现这些方法?当您生成服务客户端时,它应该自动生成未知类型,如时间表。当然!此外,时间表在我的.wsdl文件中正确生成-我可以正常地在.xsd文件中看到它的定义。早些时候,我在IIS7上单独托管了webservice,使用soapUI检索数据,而不是通过DotNetOpenAuth的consumer/SP进行检索,该webservice生成的.xsd文件与新的受保护webservice相同。
protected void retrieveTimeTable_Click(object sender, EventArgs e)
{
     try
     {                
         List<object> timeTables = CallService(client => client.retrieveTimeTable("1", "52"));
         this.retrieveTimeTableLabel.Text = timeTables.Count.ToString();
     }
     catch (SecurityAccessDeniedException)
     { this.retrieveTimeTableLabel.Text = "Access denied!"; }}

private T CallService<T>(Func<DataApiClient, T> predicate) 
{
    DataApiClient client = new DataApiClient();
    var serviceEndpoint = new MessageReceivingEndpoint(client.Endpoint.Address.Uri, HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest);
    var accessToken = Session["WcfAccessToken"] as string;
    if (accessToken == null) 
    { throw new InvalidOperationException("No access token!"); }
    WebConsumer consumer = this.CreateConsumer();
    WebRequest httpRequest = consumer.PrepareAuthorizedRequest(serviceEndpoint, accessToken);
    HttpRequestMessageProperty httpDetails = new HttpRequestMessageProperty();
    httpDetails.Headers[HttpRequestHeader.Authorization] = httpRequest.Headers[HttpRequestHeader.Authorization];
    using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) {
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpDetails;
          return predicate(client); }}
public List<string> getList()
{ return base.Channel.getList(); }
public List<TimeTable> retrieveTimeTable(string weekVan, string weekTot)
{
    TimeTableWebService ttws = new TimeTableWebService();
    List<TimeTable> results = ttws.getTimeTable(weekVan, weekTot);

    StringBuilder fbr = new StringBuilder();
    fbr.AppendLine("New log created on: " + DateTime.Now.ToString());
    fbr.AppendLine("Number of results: " + results.Count);

    using (StreamWriter outfile = new StreamWriter(@"D:\oauthSiteTest\log9.txt"))
    { outfile.Write(fbr.ToString()); }

    return results; }