Проблема с веб-ссылками в WCF

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

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

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

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

Можете ли вы рассказать мне, как я должен отлаживать это дальше и что я должен проверить, или если есть дополнительные шаги, которые мне нужно обеспечить, чтобы веб-ссылка работала в приложении wcf

Спасибо

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();
        }    

    }
}

person kaivalya    schedule 27.08.2009    source источник
comment
Является ли объект грузоотправителя службой или это данные, возвращаемые службой?   -  person Pierre-Alain Vigeant    schedule 27.08.2009
comment
Вы можете опубликовать фрагмент исходного кода?   -  person Jaimal Chohan    schedule 27.08.2009
comment
Извините, я должен был быть более конкретным, можете ли вы опубликовать код, который вы используете для использования этой службы wcf?   -  person Jaimal Chohan    schedule 27.08.2009
comment
сервис добавляется в приложение как ссылка на сервис   -  person kaivalya    schedule 27.08.2009


Ответы (2)


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

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

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

person Community    schedule 27.08.2009

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

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

person Pierre-Alain Vigeant    schedule 27.08.2009