Можно ли использовать Silverlight RiaServices без IIS? - PullRequest
4 голосов
/ 16 декабря 2010

Я хочу использовать 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 не обработано. Сообщение = Попытка прозрачного метода безопасности 'System.ServiceModel.DomainServices.Server.DomainTypeDescriptionProvider.GetForeignKeyMembers ()' для доступа к критически важному типу безопасности System.ComponentModel.DataAnnotations.Accessoc.Сборка '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..DomainServices.Server..DomainServiceDescription. <> c_ DisplayClass8.b _7 (тип Type) в System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 2 valueFactory) в System.ServiceModel.DomainServices.Server.DomainServiceDescription.GetDescription (Тип domainServiceType) в System.Serl.Hosting.DomainServiceHost..ctor (Тип domainServiceType, Uri [] baseAddresses) в PartialTrustTest.Program.Main (String [] args) в D: \ Users \ carlucci \ Documents \ My Dropbox \ My Dropbox \ Way2 \ PartialTrustTest \ PartialTrustTest \ Program.cs: ​​строка 10 в System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, аргументы String []) в System.AppDomain.nExecuteAssembly (сборка RuntimeAssembly, аргументы String []) в System.Runtime.Hosting.ManifestRunner.Run (логическая проверка atptM)System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly () в System.Runtime.Hosting.ApplicationActivator.CreateInstance (ActivationContext ActivationContext, String [] ActivationCustomData) в System.Runtime.Hosting.ApplicationActivator. activateContextIntectionionContext) в System.Activator.CreateInstance (ActivationContext активацииContext) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone () в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, Boolean ignoreSyncCtx) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.Th

readHelper.ThreadStart () InnerException:

Я пытался добавить System.ComponentModel.DataAnnotations в APTCA, но безуспешно: (

Я изменил свое приложение для запуска с полным доверием, но безуспешно: (

Есть идеи?

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

Мало того, что это возможно, но вот полный список кода, который предоставляет 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();
              }
       }
}
0 голосов
/ 18 мая 2011

Вы можете использовать Сервисы RIA без IIS.Настройте службу домена перед открытием:

DomainServiceHost host = new DomainServiceHost(typeof(DomainService1), uri);
host.Description.Behaviors.Remove<AspNetCompatibilityRequirementsAttribute>();

Также проверьте * .config вашего exe-файла, так как я помню, что были некоторые настройки, связанные с IIS, которые вы должны удалить.

А также в свойствах проекта в VS откройте вкладку «Отладка» и снимите флажок «Включить процесс размещения Visual Studio».

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