我有一个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();
}
}
}
答案 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()
)返回会话正在存储的布尔值。