2013-03-02 29 views
7

Mam opartą na CLR procedurę przechowywaną, która wykorzystywała MsmqIntegrationBinding do wysyłania wiadomości do zdalnych MSMQ. Wszystko działało dobrze w SQL Server 2005, ale teraz ma miejsce aktualizacja w latach 2005-2012. Próbowałem zarejestrować CLR (SP) w SQL Server 2012, ale podczas rejestracji System.ServiceModell.DLL pojawił się następujący błąd.Rejestrowanie funkcji CLR (opartej na WCF) w SQL Server 2012

Msg 6544, Level 16, State 1, Linia 1
TWORZENIE montażowe dla montażu 'System.ServiceModel' nie powiodło się, ponieważ zespół 'microsoft.visualbasic.activities.compiler' jest uszkodzony lub nie jest to czysta NET . Nie można zweryfikować PE Header/native stub.

Szukałem rezolucji i wygląda na to, że niewiele osób ma ten sam problem i na razie nie ma na to rozwiązania.

Głównym powodem używania MSMQIntegrationBinding jest chęć upewnienia się, że każda wiadomość jest dostarczana tylko raz. Jak widać, byłem bardzo zainteresowany właściwością ExactlyOnce, której nie ma w zwykłej klasie system.messaging. Przetwarzamy tysiąc wiadomości, a kolejność wysyłania wiadomości jest bardzo ważna, im dalej każda wiadomość jest opatrzona identyfikatorem i jeśli wysyłana jest jakaś wiadomość, która ma identyfikator mniejszy niż poprzednio wysłana wiadomość, system klienta zatrzymuje się (duży problem).

Mam również przepisane CLR przechowywane proc przy użyciu system.messaging. Potrzebuję tylko sugestii, czy może on wspomóc scenariusz, o którym wspomniałem powyżej.

+0

Zamiast tego wywołaj usługę WCF, która będzie pełnić funkcję proxy wywołania kolejki. – abatishchev

+0

Co to jest bitness SQL Server i zespołu? – abatishchev

Odpowiedz

2

Mam taki sam problem jak ty i nie wiem, czy jest na to rozwiązanie. Znalazłem:

Istnieją dwa typy zespołów .NET. Czyste zespoły .NET zawierają tylko instrukcje MSIL. Mieszane złożenia zawierają zarówno niezarządzane instrukcje maszynowe, jak i instrukcje MSIL. Zespoły mieszane są generalnie kompilowane przez kompilator C++ z przełącznikiem/clr, ale zawierają instrukcje maszynowe wynikające z natywnego kodu C++.

Bez względu na to, która wersja SQL Server, CREATE ASSEMBLY zezwala wyłącznie na rejestrowanie czystych zespołów .NET. SQL Server zawsze wymagał, aby zestaw do załadowania do bazy danych SQL Server z CREATE ASSEMBLY zawierał tylko instrukcje MSIL (czysty montaż). CREATE ASSEMBLY podniesie powyższy błąd, jeśli zespół, który ma być zarejestrowany, jest zespołem mieszanym.

Od http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

Chodzi o to, że naprawdę musimy odnieść się do System.ServiceModel.

Zgaduję więc, że w najbliższej przyszłości nie ma na to żadnego rozwiązania. To, co musimy zrobić, to kodować w inny sposób.

+1

Co jest innego? Znalazłeś rozwiązanie? – sojim2