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

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

0 голосов
/ 27 августа 2009

У меня есть служба 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();
        }    

    }
}

Ответы [ 2 ]

1 голос
/ 27 августа 2009

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

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

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

0 голосов
/ 27 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...