.NET Web Service - Cara memanggil C dll yang tidak dikelola

Saya memiliki persyaratan untuk memanggil dll (c tidak dikelola) dari layanan web .NET (asmx atau WCF).

Memanggil dll dari layanan web sangatlah mudah dan berfungsi seperti yang diharapkan.

Namun, masalah muncul saat saya menguji beban layanan web. (kode kesalahan 0xC0000374 - "kesalahan internal, biasanya melibatkan kerusakan tumpukan”).

Saya telah diberitahu oleh pemilik dll bahwa dll tidak dapat diandalkan dalam lingkungan multi-utas jika 2 panggilan atau lebih dikirim secara bersamaan.

Dalam aplikasi windows tradisional, saya akan mengatasinya dengan menerapkan kelas tunggal untuk melindungi dll. Apakah ada pendekatan yang disarankan untuk mencapai hal ini dalam implementasi layanan web?


person JohnC    schedule 09.06.2010    source sumber
comment
tolong, coba bagikan sebanyak detailnya. permasalahan yang muncul – permasalahan seperti apa?   -  person Andrey    schedule 09.06.2010
comment
Saya tidak begitu mengerti bagaimana pola tunggal melindungi dari panggilan paralel yang datang dari thread berbeda.   -  person Darin Dimitrov    schedule 09.06.2010
comment
Andrey, pertanyaan diperbarui dengan info lebih lanjut.   -  person JohnC    schedule 09.06.2010
comment
tolong bisakah Anda menjelaskan bagaimana Anda memanggil dll dari layanan web .NET asmx? saya perlu mencapai hal yang sama tetapi sepertinya saya tidak dapat memuat dll.   -  person Anass Boukalane    schedule 17.12.2016
comment
@JohnC bisakah Anda memberikan contoh panggilan dll dari layanan Web?   -  person Anass Boukalane    schedule 19.12.2016


Jawaban (2)


Jika Anda hanya perlu memastikan bahwa hanya satu thread pada satu waktu yang dapat memanggil dll Anda, Anda dapat menggabungkan akses apa pun ke thread tersebut dalam pernyataan lock:

public static class MyDllCalls
{
    private static object _lockObject = new object();

    public static int SomeCall()
    {
        lock (_lockObject)
        {
            return CallSomeFunctionInYourDll();
        }
    }
}

Hanya satu thread yang dapat menahan kunci pada waktu tertentu, jadi dengan cara ini Anda dapat mencegah beberapa thread melakukan panggilan secara paralel.

person Fredrik Mörk    schedule 09.06.2010

Untuk mencegah beberapa utas memanggil metode yang sama secara paralel, Anda dapat menggunakan mekanisme penguncian.

person Darin Dimitrov    schedule 09.06.2010