Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Не загружается сборка сериализации / 1 сообщений из 1, страница 1 из 1
06.12.2013, 17:25
    #38492154
risedphantom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не загружается сборка сериализации
Добрый день. Есть проблемка с вызовом web методов из сборки в SQL.
Есть проект на С# библиотеки, которая выгружается в качестве сборки в MS SQL Server.
В проект добавлена web служба в references.
Небольшой пример использования:
Код библиотеки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
using System;
using System.Data;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.ServiceModel;

public class CRMService
{
    private static bool isnull(DataSet ds)
    {
        return ((ds == null) || (ds.Tables.Count < 1) || (ds.Tables[0].Rows.Count < 1));
    }

    [SqlProcedure]
    public static void ContactIns(SqlString sName, SqlString sPass, SqlString sSessionID, SqlInt64 lContactType, SqlInt64 lClientID)
    {
        DataSet ds;
        long lContactID;
            
        String sServiceAddress = "http://10.0.7.11/CRMService/CRMService.asmx";
        
        EndpointAddress endpoint = new EndpointAddress(sServiceAddress.ToString());
        BasicHttpBinding bind = new BasicHttpBinding();

        bind.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        bind.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;

        using (CrmCLR.CRMService.CRMServiceSoapClient crmservice = new CrmCLR.CRMService.CRMServiceSoapClient(bind, endpoint))
        {
            //Authorization
            ds = crmservice.LogUserWithoutCheck(sName.ToString(), sPass.ToString());
            return;
        }
    }
}


В соответствии с рекомендациями MSDN надо сгенерировать сборку сериализации (иначе на момент исполнения она сгенерируется автоматически и попытается загрузиться. Это нарушает политику безопастости и мы получим "Cannot load dynamically generated serialization assembly. In some hosting environments assembly load functionality is restricted, consider using pre-generated serializer").
Для надежности генерируем её SGEN - добавляем в проект Post Build actions:
Код: powershell
1.
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\sgen.exe" /force "$(TargetPath)"

.
Далее регистрируем сборку в SQL (Даже 2 сборки - сборку с процедурой и сериализацию к ней):
Регистрируем сборку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
declare @path nvarchar(4000) = N'\\dev01intmsk\Share\';

-- drop modules
if object_id('ContactIns') is not null
	drop procedure ContactIns;

--=======================================================
-- drop assemblies
if exists(	select	1
			from	sys.assemblies
			where	[name] = 'CrmCLR.XmlSerializers')
	drop assembly [CrmCLR.XmlSerializers];

if exists(	select	1
			from	sys.assemblies
			where	[name] = 'CrmCLR')
	drop assembly [CrmCLR];

-- generate assemblies
create assembly CrmCLR
authorization [dbo]
from	@path + N'CrmCLR.dll'
with	permission_set = unsafe;

create assembly [CrmCLR.XmlSerializers]
authorization [dbo]
from	@path + N'CrmCLR.XmlSerializers.dll'
with	permission_set = safe;
go

-- create modules
--===========================================================
create procedure dbo.ContactIns
		@sName nvarchar(4000)
	,	@sPass nvarchar(4000)
	,	@sSessionID nvarchar(4000)
	,	@lContactType bigint
	,	@lClientID bigint
with execute as owner
as external name CrmCLR.CRMService.ContactIns
go


Подключаемся к серверу и видим, что сборки загружены:
Screenshot

Однако при исполнении процедуры SQL всё равно пытается сам сгенерировать сериализацию (ошибка на скриншоте). Может у кого-нибудь есть догадки почему такое происходит?
З.Ы. Опыт проделывался многократно - результат один
З.З.Ы. Метод службы не вызывается - висел на отладке. Ошибка возникает при попытке сериализовать текст HTTP запроса
З.З.З.Ы. Сборка CrmCLR.XmlSerializers не пустая - смотрел в DotPEEK - сериализация для нашего класса CRMServiceSoapClient есть
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Не загружается сборка сериализации / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]