Как вызвать веб-службу WCF из Silverlight?

Я пытаюсь вызвать веб-сервис WCF (который я разработал) из приложения Silverlight. По какой-то причине приложение Silverlight не выполняет HTTP-вызов службы с помощью мыла. Я знаю это, потому что я обнюхиваю весь http-трафик с помощью Fiddler (и это не вызов localhost).

Это моя конфигурация на сервере, относящаяся к WCF:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name = "ServiceBehavior">
                <serviceMetadata httpGetEnabled = "true"/>
                <serviceDebug includeExceptionDetailInFaults = "false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled = "true"/>
    <services>
        <service behaviorConfiguration = "ServiceBehavior" name = "Service">
            <endpoint address = "" binding = "basicHttpBinding" contract = "Service"/>
            <endpoint address = "mex" binding = "mexHttpBinding" contract = "IMetadataExchange"/>
        </service>
    </services>
</system.serviceModel>

И файл ServiceReferences.ClientConfig в приложении silverlight (я использую бета-версию 2):

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name = "BasicHttpBinding_Service" maxBufferSize = "65536"
                maxReceivedMessageSize = "65536">
                <security mode = "None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address = "http://itlabws2003/Service.svc" binding = "basicHttpBinding"
            bindingConfiguration = "BasicHttpBinding_Service" contract = "Silverlight_organigram.DataService.Service"
            name = "BasicHttpBinding_Service" />
    </client>
</system.serviceModel>

Это метод silverlight, который вызывает службу, я вставляю весь метод для полноты, лямбда должна сделать вызов синхронным, я отладил его, и после строки client.GetPersonsAsync () Fiddler не показывает никаких сообщений, отправляемых в сервер.

    public static List<Person> GetPersonsFromDatabase()
    {
        List<Person> persons = new List<Person>();

        ServiceClient client = new ServiceClient();

        ManualResetEvent eventGetPersons = new ManualResetEvent(false);

        client.GetPersonsCompleted += new EventHandler<GetPersonsCompletedEventArgs>(delegate(object sender, GetPersonsCompletedEventArgs e)
            {
                foreach (DTOperson dtoPerson in e.Result)
                {
                    persons.Add(loadFromDto(dtoPerson));
                }
                eventGetPersons.Set();
            });

        client.GetPersonsAsync();
        eventGetPersons.WaitOne();

        return persons;
    }

Есть ли у кого-нибудь предложения, как я могу это исправить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 687
3

Ответы 3

Вы бы случайно не запускались из файловой системы, не так ли? Если вы обслуживаете приложение Silverlight на своем локальном компьютере и не используете VS Web Server или IIS, вы не сможете выполнять HTTP-вызовы по соображениям безопасности. Точно так же, если вы загружаете с веб-сервера, вы не можете получить доступ к локальным ресурсам.

Также я обнаружил, что Nikhil's Web Development Helper http://www.nikhilk.net/ASPNETDevHelperTool.aspx может быть более полезным, чем Fiddler, потому что вы также увидите локальный трафик, хотя в данном случае не похоже, что это ваша проблема.

Веб-сайт работает в IIS 6.1 на другом компьютере в локальной сети.

Dani Duran 26.09.2008 20:53

Я не уверен на 100%, но если вы работаете в Vista или Server 2008, возможно, вы столкнулись с проблемой контроля доступа пользователей с http.sys.

Таким образом, на сервере Vista и Win2k8 HttpListener будет прослушивать, только если вы работаете под учетной записью с высоким уровнем привилегий. Фактически, по моему опыту, даже если вы добавитесь в группу администраторов местный, вы можете столкнуться с этой проблемой.

В любом случае попробуйте запустить Visual Studio в Vista, щелкнув правой кнопкой мыши и запустите от имени администратора. Посмотрим, исправит ли это это. Если да, то все в порядке, но ....

в идеале вы должны запустить httpcfg

нравиться: httpcfg установить urlacl -u http: // itlabws2003 -a D: (A ;; GX ;;; твойсид)

ваш sid = идентификатор безопасности учетной записи, под которой вы работаете, вы можете найти его здесь: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList

если вы этого еще не знаете или можете добавить себя в BUILTIN \ Administators, найдите sid и снова запустите httpcfg через командную строку, указав этот sid.

Контроль доступа пользователей, Vista и Http.sys вызывают все это ... если это действительно проблема, с которой вы столкнулись. Не уверен, но, возможно, стоит попробовать

кроме того, это необходимо сделать на обоих коробках, если это действительно так.

Ta01 27.09.2008 00:50

спасибо за ответ, я использую Windows Server 2003 и XP pro, так что я думаю, что это не мой случай, но я буду иметь это в виду.

Dani Duran 29.09.2008 01:30

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

Если вы хотите, чтобы приложение Silverlight размещалось в другом домене, чем веб-служба, вы можете взглянуть на эта почта, чтобы помочь вам иметь файл определения междоменного домена или вместо этого написать средний «прокси».

Другие вопросы по теме