Я создал службу хостинга WCF на локальной машине, и приложение Silverlight получает данные из этой службы и отправляет их на удаленный сервер.Это работало более месяца, но внезапно перестало жаловаться на общеизвестные ошибки. Clientaccesspolicy.xml не удалось устранить.Потратив довольно много времени на отладку, я понял, что это не удалось, поскольку адрес удаленного сервера был изменен на IP-адрес вместо адресов домена, например http://2xx.1xx.223 iso http://www.myserver.com,, но адрес домена больше не доступенпоэтому я не могу воспроизвести его и не уверен, что изменение адреса действительно является преступлением.
Это все равно работает нормально, если веб-сервер и служба собственного хостинга работают на моем компьютере разработчика, и я вижу файл в своем браузере как "http://localhost:8000/clientaccesspolicy.xml", но ошибка 404, если ввести "http://my -machine-name: 8000 / clientaccesspolicy.xml". Как я читал в некоторых блогах, файл clientaccesspolicy.xml должен находиться в 80 портах локальной машины, но я не знаю, как это сделать.и не уверен, что это создает проблему.
Мой сервисный хост настроен следующим образом:
string baseAddress = "http://localhost:8000";
//Create a ServiceHost for the OPCService type and
//provide the base address.
_serviceHost = new ServiceHost(typeof(OpcService), new Uri(baseAddress));
_serviceHost.AddServiceEndpoint(typeof(IOpcService), new BasicHttpBinding(), new Uri(baseAddress + "/OpcService"));
_serviceHost.AddServiceEndpoint(typeof(IPolicyRetriever), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());
И clientacceccpolicy.xml используется через интерфейс
private 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);
}
И silverlightклиент использует службу с прокси-сервером без ServiceReferences.ClientConfig, но с привязкой службы, чтобы легко получить веб-методы.
public class ServiceProxy
{
private const string ServiceEndPoint = "http://localhost:8000/OpcService";
private static Uri _serviceMap = new Uri(ServiceEndPoint, UriKind.Absolute);
public static T GetProxyFor<T>()
{
return new ChannelFactory<T>(new BasicHttpBinding(), new EndpointAddress(_serviceMap)).CreateChannel();
}
[Export]
public IOpcService SyrOpcService
{
get { return GetProxyFor<IOpcService>(); }
}
public static SYR.HMI.OpcProxy.ServiceReference.OpcServiceClient GetProxy()
{
return new SYR.HMI.OpcProxy.ServiceReference.OpcServiceClient();
}
}
Я считаю,Здесь много тем и гугл, но не совсем как у меня, и до сих пор неясно, в чём проблема, смена IP-адреса или расположение файла клиента.
Буду признателен за добрый совет.Заранее спасибо.
HK.Lee