Можно ли использовать Silverlight RiaServices без IIS?
Я хочу использовать silverlight в качестве интерфейса службы Windows. Для этого я использую пользовательский веб-сервер для предоставления файла xap, и он работает нормально.
Теперь я хочу использовать RiaServices, но, конечно, я не участвую в IIS.
Вот мой код:
[EnableClientAccess]
public class TestDomainService : DomainService {
public IQueryable<Foo> GetPontos() {
List<Foo> list = new List<Foo>();
list.Add(new Foo {Id = 1});
return list.AsQueryable();
}
}
public class Foo {
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
И программа:
static void Main(string[] args) {
DomainServiceHost host = new DomainServiceHost(typeof(TestDomainService), new Uri("http://0.0.0.0:8099/TestDomainService"));
host.Open();
}
Вы можете использовать этот код в пустом приложении cmd, и как только вы нажмете кнопку play, выдается исключение времени выполнения:
System.TypeAccessException не обработано. Message= Попытка прозрачного метода безопасности 'System.ServiceModel.DomainServices.Server.DomainTypeDescriptionProvider.GetForeignKeyMembers()' для доступа к критическому типу безопасности System.ComponentModel.DataAnnotations.AssociationAttribute. Сборка 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35' является условно APTCA-сборкой, которая не включена в текущем AppDomain. Чтобы включить эту сборку, которая будет использоваться путем частичного доверия или прозрачного защитного кода, пожалуйста, добавьте сборочные имя "System.ComponentModel.DataAnnotations, PublicKey=0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9" в список на PartialTrustVisibleAssemblies при создании AppDomain. Source = System.ServiceModel..ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetProperties () в System.ComponentModel.TypeDescriptor.GetProes..DomainServices.Server..DomainServiceDescription.<> C_ D isplayClass8.b _7 (Type type) в System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func
2 valueFactory) в System.ServiceModel.DomainServices.Server.DomainServiceDescription.GetDescription(Тип domainServiceType) в System.ServiceModel.DomainServices.Hosting.DomainServiceHost..ctor(Тип domainServiceType, Uri[] PartaDress.rusT.Tress.ringT_SignTress.ring_Dress_Ru_SignTress.Ru) ] args) в D:\Users\carlucci\Documents\My Dropbox\My Dropbox\Way2\PartialTrustTest\PartialTrustTest\Program.cs: строка 10 в System.AppDomain._nExecuteAssembly(сборка RuntimeAssembly, String[] args) в System.AppDomain.nExecuteAssembly(сборка RuntimeAssembly, аргументы String []) в System.Runtime.Hosting.ManifestRunner.Run(логическое checkAptModel) в System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() в активации System.Runtime.HostingIntectionContection.Application.text.Connect.Connect., String [] активации CustomData) в System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext активации Context) в System.Activator.CreateInstance(ActivationContext активации Context) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() в System.Threading.ThreadHelper.ThreadStart_Context(состояние объекта) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext, ExecutionContext, ContextCallback. (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.Th
readHelper.ThreadStart () InnerException:
Я пытался добавить System.ComponentModel.DataAnnotations в APTCA, но безуспешно:(
Я изменил свое приложение для запуска в полном доверии, но безуспешно:(
Любая идея?
2 ответа
Мало того, что это возможно, но вот полный список кода, который предоставляет RIA OData, которая может использоваться Excel PowerPivot. Помните, что вы должны выключить хостинг Visual Studio или просто запустить без отладки. При использовании PowerPivot не забудьте включить косую черту, чтобы ваш URL-адрес был: http://localhost:999/TestDomainService/
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.ServiceModel.Activation;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
namespace ConsoleApplication1
{
public partial class Program
{
[EnableClientAccess]
public class TestDomainService : DomainService
{
[Query(IsDefault=true)]
public IQueryable<Foo> GetAllFoos()
{
return new Foo[] { new Foo { Id = 1, Name = "Jonathan" } }.AsQueryable();
}
}
public class Foo
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
static void Main(string[] args)
{
var svc = new DomainServiceHost(typeof(TestDomainService), new Uri[] { new Uri("http://localhost:999/TestDomainService") });
svc.Description.Behaviors.RemoveAll<AspNetCompatibilityRequirementsAttribute>();
var svcDescription = DomainServiceDescription.GetDescription(typeof(TestDomainService));
var endpoints = new ODataEndpointFactory().CreateEndpoints(svcDescription, svc);
svc.Description.Endpoints.Clear();
foreach (var endpoint in endpoints)
{
svc.Description.Endpoints.Add(endpoint);
}
svc.Open();
Console.WriteLine("Domain service started, press any key to exit.");
Console.ReadKey();
}
}
}
Вы можете использовать Сервисы RIA без IIS. Настройте службу домена перед открытием:
DomainServiceHost host = new DomainServiceHost(typeof(DomainService1), uri);
host.Description.Behaviors.Remove<AspNetCompatibilityRequirementsAttribute>();
Также проверьте *.config вашего exe-файла, так как я помню, что были некоторые настройки, связанные с IIS, которые вы должны удалить.
А также в свойствах проекта в VS откройте вкладку "Отладка" и снимите флажок "Включить процесс размещения Visual Studio".