WCF上的Web引用问题

时间:2009-08-27 19:22:21

标签: wcf web-services wsdl

我有一个WCF服务,我可以从我的Web应用程序连接到该服务并获取数据。

我现在将此wcf项目的Web引用添加到运输公司提供的wsdl文件中。意图是获得运费报价..

我可以访问从这个wsdl文件生成的对象,但是当我调用service.Authenticate(“DEMO”)时;

方法几乎没有任何反应。我调试并看到调试器继续到下一行,但服务参数和service.isauthorized没有变化为null ..

您能否引导我进一步调试此问题以及我应该检查的内容,或者是否需要其他步骤以确保在wcf app上使用Web引用

由于

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using ShippingCalculator.com.freight.api;

namespace ShippingCalculator
{        
    public class ShippingService : IShippingService
    {
        freight_service service = new freight_service();


        public string GetData(int value)
        {
            service.setConnectionType(".net");
            service.Authenticate("DEMO");

            OriginRequest origin = new OriginRequest();
            origin.zip = "60101";

            DestinationRequest destination = new DestinationRequest();
            destination.zip = "10001";

            PackageRequest package = new PackageRequest();
            package.weight = "10";

            ShipmentInfoRequest shipmentInfo = new ShipmentInfoRequest();
            shipmentInfo.ship_date = DateTime.Now.AddDays(5);

            service.setOrigin(origin);
            service.setDestination(destination);
            service.setPackage(package);
            service.setShipmentInfo(shipmentInfo);

            Quote quote = service.getQuote();

            return string.Format("Quote Number: {0}<br /> ", quote.QuoteNumber);
        }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ShippingTestApp.ShippingServiceReference;

namespace ShippingTestApp.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ShippingServiceClient shipClient = new ShippingServiceClient();
            shipClient.GetData(0);

            ViewData["Message"] = shipClient.GetData(0);

            return View();
        }    

    }
}

2 个答案:

答案 0 :(得分:1)

假设'isauthorized'属性是您调用服务的代理类的一部分;属性指示state,它实际上不是WCF服务客户端代理的服务模型的一部分。根据'.authorize()'方法的结果,您的响应类应该告诉您需要了解的有关用户授权的信息,您应该自己管理'isauthorized'状态,可能是通过包装WCF代理的应用程序层类

要确定是否正在调用服务,您可以在web.config中启用WCF跟踪,或者安装网络跟踪应用程序,如Netmon或Wireshark。对于WCF跟踪,您应该运行Windows SDK附带的服务配置编辑器(SvcConfigEditor.exe)。

对于网络跟踪路由,请运行网络跟踪应用程序,设置捕获筛选器以仅显示与WCF物理主机IP地址之间的数据包,并监视Web客户端服务器与WCF服务器之间的网络流量。

答案 1 :(得分:0)

我不知道你的freight_service对象的内部,但是WCF服务没有属性。

[ServiceContract]只能公开方法。如果您无法进行身份验证,则典型的WCF身份验证方案将引发异常,或者如果您使用的是会话服务,则需要其他方法(如IsAuthorized())返回会话正在存储的布尔值。