2009-08-27 2 views
0

У меня есть служба WCF, с которой я могу подключиться к своему веб-приложению и получить данные.Проблема с веб-ссылкой в ​​WCF

Теперь я добавил веб-ссылку на этот проект wcf в файл wsdl, который предоставляет компания по транспортировке. Намерение заключается в том, чтобы получить цитаты с доставкой.

Я могу получить доступ к объектам, созданным из этого файла wsdl, но когда я вызываю service.Authenticate («DEMO»);

метод почти ничего не происходит. Я отлаживаю и вижу, что отладчик продолжается до следующих строк, но нет никаких изменений в параметрах обслуживания, а service.isauthorized имеет значение null.

Можете ли вы привести меня к тому, как я должен отлаживать это дальше и вещи, которые я должен проверить, или если есть дополнительные шаги, которые я должен обеспечить, чтобы иметь веб-ссылки работают на ФОС приложение

Благодаря

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

Является ли отправитель объектом услугой или это данные, возвращаемые службой? –

+0

его услуга – kaivalya

+0

Можете ли вы опубликовать фрагмент исходного кода? –

ответ

1

Предполагая, что свойство «isauthorized» является частью класса прокси, на котором вызов службы; свойства указывают состояние, которое на самом деле не является частью модели служб для прокси-серверов службы WCF. Основываясь на результатах метода «.authorize()», ваш класс ответа должен сообщить вам, что вам нужно знать относительно авторизации пользователя, и вы должны сами управлять состоянием «isauthorized», вероятно, через класс прикладного уровня, который обертывает прокси-сервер WCF ,

Чтобы определить, вызвана ли служба, вы можете включить трассировку WCF в файле web.config или установить приложение трассировки сети, такое как Netmon или Wireshark. Для трассировки WCF вы должны запустить редактор конфигурации службы, который поставляется с Windows SDK (SvcConfigEditor.exe).

Для маршрута трассировки сети запустите приложение трассировки сети, установите фильтр захвата, чтобы отображать только пакеты на/из IP-адреса физического хоста WCF, а также следить за сетевым трафиком между сервером веб-клиента и сервером WCF.

0

Я не знаю внутренних объектов вашего объекта freight_service, но служба WCF не имеет свойств.

A [ServiceContract] может раскрывать только методы. Типичный сценарий проверки подлинности WCF вызовет исключение, если вы не смогли аутентифицироваться или используете сеансовую службу, вам нужен другой метод, например IsAuthorized(), который вернет логическое значение, которое хранит сеанс.