Silverlight для собственного размещения WCF - PullRequest
0 голосов
/ 06 февраля 2011

У меня есть приложение silverlight, в котором есть WCF. Так как это WCF с собственным хостингом, я понимаю, что должен добавить интерфейс, похожий на:

[ServiceContract]
public interface IPolicyRetriever
{
    [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
    Stream GetSilverlightPolicy();
    [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]
    Stream GetFlashPolicy();
}

и реализация:

Stream StringToStream(string result)
    {
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
        return new MemoryStream(Encoding.UTF8.GetBytes(result));
    }
    public Stream GetSilverlightPolicy()
    {
        string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
        <access-policy>
            <cross-domain-access>
                <policy>
                    <allow-from http-request-headers=""*"">
                        <domain uri=""*""/>
                    </allow-from>
                    <grant-to>
                        <resource path=""/"" include-subpaths=""true""/>
                    </grant-to>
                </policy>
            </cross-domain-access>
        </access-policy>";
        return StringToStream(result);
    }
    public Stream GetFlashPolicy()
    {
        string result = @"<?xml version=""1.0""?>
        <!DOCTYPE cross-domain-policy SYSTEM ""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"">
        <cross-domain-policy>
            <allow-access-from domain=""*"" />
        </cross-domain-policy>";
        return StringToStream(result);
    }

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

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

это мой ServiceReference.ClientConfig:

    <configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IMapService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:4693/MapService.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IMapService" contract="MapService.IMapService"
                name="BasicHttpBinding_IMapService" />
        </client>
    </system.serviceModel>
</configuration>

спасибо!

1 Ответ

1 голос
/ 06 февраля 2011

Стек Silverlight Http (HTTP clientaccesspolicy.xml)

Должен быть размещен в корневом каталоге вашего целевого домена.Может быть легко проверено с помощью веб-браузера.Silverlight проверяет его автоматически один раз.

Silverlight 3 сокета (сервер пользовательских политик)

Я уже создал этот сервер политик для Silverlight для приложения Log2Console.

Я думаю, этот код может помочь Сервер политик SL .

Он должен быть размещен на специальном порту TCP-порт 943.

Silverligt 4 сокета (по умолчанию, как в SL3, но может быть включен для HTTP)

Установить свойство SocketAsyncEventArgs.SocketClientAccessPolicyProtocol для SocketAsyncEventArgs, передаваемого Socket.ConnectAsync в SocketClientAccessPolicyProtocol.Http.

.1025 * Silverlight диапазон возможных портов

80, 443, 4502-4532 (если разрешено в clientaccesspolicy.xml)

Подробная документация

...