Saya memiliki Layanan WCF yang berjalan dengan baik di komputer lokal saya. Saya meletakkannya di server, dan saya menerima kesalahan berikut:
Terjadi kesalahan saat menerima tanggapan HTTP ke http: //xx.xx.x.xx: 8200 / Services / WCFClient.svc . Ini mungkin karena pengikatan titik akhir layanan tidak menggunakan protokol HTTP. Ini juga bisa disebabkan oleh konteks permintaan HTTP yang dibatalkan oleh server (mungkin karena layanan dimatikan). Lihat log server untuk lebih jelasnya.]
Saya telah pergi ke layanan di url dan berfungsi dengan benar. Yang saya lakukan untuk fungsi ini adalah mengembalikan string ke nama gambar, jadi data yang dikirimkan tidak banyak. Saya telah menelusuri log dan ini memberi saya informasi yang sama. Ini adalah konfigurasi klien saya:
<binding name="basicHttpBinding_IWCFClient" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
<endpoint name="basicHttpBinding_IWCFClient"
address="http://localhost:4295/Services/WCFClient.svc"
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding_IWCFClient"
behaviorConfiguration="WCFGraphicManagementTool.Services.ClientBehavior"
contract="WCFClient.IWCFClient" />
Ini adalah konfigurasi server saya:
<service behaviorConfiguration="WCFGraphicManagementTool.Services.WCFClientBehavior"
name="WCFGraphicManagementTool.Services.WCFClient">
<endpoint name="basicHttpBinding_IWCFClient"
address=""
binding="basicHttpBinding"
contract="WCFGraphicManagementTool.Contracts.IWCFClient" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
<behavior name="WCFGraphicManagementTool.Services.WCFClientBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceThrottling maxConcurrentCalls="120" maxConcurrentSessions="120"
maxConcurrentInstances="120" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
Apakah ini akan menjadi pengaturan di server karena berfungsi di komputer lokal saya?
sumber
Jawaban:
Saya pikir ada masalah serialisasi, Anda dapat menemukan kesalahan persis hanya perlu menambahkan kode di bawah ini di konfigurasi layanan di
<configuration>
bagian.Setelah
"App_tracelog.svclog"
file config update akan dibuat, di mana layanan Anda ada hanya perlu membuka.svclog
file dan menemukan garis warna merah di panel sisi kiri yang error dan lihat deskripsinya untuk info lebih lanjut.Saya harap ini akan membantu menemukan kesalahan Anda.
<system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing"> <listeners> <add name="ServiceModelTraceListener" /> </listeners> </source> </sources> <sharedListeners> <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" /> </sharedListeners> </system.diagnostics>
sumber
System.Runtime.Serialization
sumber dalam jejak saya.<system.diagnostics>
bagian tersebut ke akhir file, tepat di atas</configuration>
. Jika Anda menempelkannya di bagian atas, Anda bisa mendapatkan kesalahan tipe konten saat menjalankan aplikasi Anda.Saya mengalami masalah ini "Ini mungkin karena pengikatan titik akhir layanan tidak menggunakan protokol HTTP" dan layanan WCF akan dimatikan (dalam mesin pengembangan)
Saya menemukan: dalam kasus saya, masalahnya adalah karena Enums,
Saya memecahkan menggunakan ini
[DataContract] [Flags] public enum Fruits { [EnumMember] APPLE = 1, [EnumMember] BALL = 2, [EnumMember] ORANGE = 3 }
Saya harus mendekorasi Enum saya dengan DataContract, Flags dan semua setiap anggota enum dengan atribut EnumMember.
Saya menyelesaikan ini setelah melihat Referensi msdn ini :
sumber
Saya mengalami kesalahan yang sama dan masalahnya adalah serialisasi. Saya berhasil menemukan masalah sebenarnya menggunakan Service Trace Viewer http://msdn.microsoft.com/en-us/library/ms732023.aspx dan menyelesaikannya dengan mudah. Mungkin ini akan membantu seseorang.
sumber
Dalam contoh saya, kesalahan dihasilkan karena salah satu tipe kompleks saya memiliki properti tanpa metode yang ditetapkan.
Penyiar membuat pengecualian karena fakta itu. Menambahkan metode set internal dan semuanya bekerja dengan baik.
Cara terbaik untuk mencari tahu mengapa ini terjadi (menurut saya) adalah dengan mengaktifkan pencatatan jejak.
Saya mencapai ini dengan menambahkan bagian berikut ke saya
web.config
:<system.diagnostics> <sources> <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "c:\log\Traces.svclog" /> <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> </listeners> </source> <source propagateActivity="true" name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "c:\log\Traces.svclog" /> <add type="System.Diagnostics.DefaultTraceListener" name="Default" /> </listeners> </source> </sources> <trace autoflush="true" /> </system.diagnostics>
Setelah diatur, saya menjalankan klien saya, mendapat pengecualian dan memeriksa file 'Traces.svclog'. Dari sana, saya hanya perlu menemukan pengecualian.
sumber
Solusi dengan DataContract, Flags for Enums terlihat agak jelek. Dalam kasus saya, masalah diselesaikan dengan menambahkan sesuatu seperti "NotSet = 0" ke dalam enum:
public enum Fruits { UNKNOWN = 0, APPLE = 1, BALL = 2, ORANGE = 3 }
sumber
Saya menghadapi masalah yang sama dan diselesaikan dengan kode di bawah ini. (jika ada masalah konektivitas TLS)
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
Harap tempel baris ini sebelum membuka saluran klien.
sumber
Saya telah melihat kesalahan ini yang disebabkan oleh referensi melingkar di grafik objek. Menyertakan pointer ke objek induk dari anak akan menyebabkan serializer melakukan loop, dan pada akhirnya melebihi ukuran pesan maksimum.
sumber
Saya telah memahami permasalahannya. Itu akhirnya menjadi jalur ke file konfigurasi saya yang salah. Kesalahan untuk WCF terkadang sangat membantu.
sumber
Untuk memperbaikinya, kami harus mengubah AppPool Identity menjadi akun administrator .
sumber
Kesalahan ini bisa jadi karena ketidakcocokan kontrak. Simak aplikasi tiga lapis di bawah ini ...
Lapisan UI
|
Proses Lapisan
|
Lapisan Akses Data
-> Kontrak Antara Proses dan lapisan UI memiliki enum yang sama dengan yang hilang (Onhold = 3). Enum: Mulai = 1, Berhenti = 2. -> Kontrak Antara Akses Data Dan Lapisan Proses memiliki enum Enum: Mulai = 1, Berhenti = 2, Onhold = 3.
Dalam hal ini kita akan mendapatkan kesalahan yang sama pada respon lapisan proses.
Kesalahan yang sama terjadi pada ketidakcocokan kontrak lainnya dalam aplikasi berlapis-lapis.
sumber
Saya mengalami masalah ini karena saya mengkonfigurasi Layanan WCF saya untuk mengembalikan System.Data.DataTable.
Ini bekerja dengan baik di halaman HTML pengujian saya, tetapi meledak ketika saya meletakkan ini di aplikasi Formulir Windows saya.
Saya harus masuk dan mengubah tanda tangan Kontrak Operasional Layanan dari DataTable ke DataSet dan mengembalikan data yang sesuai.
Jika Anda mengalami masalah ini, Anda mungkin ingin menambahkan Kontrak Operasional tambahan ke Layanan Anda sehingga Anda tidak perlu khawatir tentang memecahkan kode yang bergantung pada Layanan yang ada.
sumber
Ini bisa terjadi karena berbagai alasan; di bawah ini adalah beberapa di antaranya:
Jika objek kontrak data Anda menggunakan warisan, pastikan semua kelas dasar memiliki atribut DataContract dan DataMember. Selain itu, Anda harus memiliki kelas dasar yang menentukan kelas turunan dengan atribut [Jenis yang Diketahui (JenisKelas (JenisBasis))] ( lihat info lebih lanjut di sini tentang ini ).
Pastikan semua properti objek kontrak data Anda memiliki properti get dan set.
sumber
Masalah saya adalah terlalu banyak item yang dikirimkan antara klien dan server. Saya harus mengubah pengaturan ini dalam perilaku di kedua sisi.
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
sumber
Ini mungkin tidak relevan dengan masalah khusus Anda, tetapi pesan kesalahan yang Anda sebutkan memiliki banyak penyebab, salah satunya adalah menggunakan tipe kembalian untuk [OperationContract] yang abstrak, antarmuka, atau tidak dikenal oleh kode klien WCF.
Cek postingan (dan solusinya) di bawah ini
https://stackoverflow.com/a/5310951/74138
sumber
Saya pikir cara terbaik untuk mengatasi ini adalah dengan mengikuti saran kesalahan, karenanya mencari log server. Untuk mengaktifkan log saya tambahkan
<system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\logs\TracesServ_ce.svclog" /> </listeners> </source> </sources> </system.diagnostics>
Lalu Anda pergi ke c: \ logs \ TracesServ_ce.svclog membukanya dengan penampil jejak layanan microsoft. Dan lihat apa masalahnya sebenarnya.
sumber
Untuk wawasan lebih lanjut tentang masalah ini, lihat juga: Sambungan yang ada ditutup secara paksa oleh host jarak jauh - WCF
Masalah saya akhirnya adalah objek transfer data saya terlalu rumit. Mulailah dengan properti sederhana seperti
public long Id { get; set; }
dan setelah Anda membuatnya berfungsi daripada mulai menambahkan barang tambahan sesuai kebutuhan.sumber
Saya berjuang dengan ini selama beberapa hari dan mencoba setiap jawaban dari posting ini dan banyak lainnya dan membagikan solusi saya karena gejalanya sama tetapi masalahnya berbeda.
Masalahnya adalah bahwa kumpulan aplikasi dikonfigurasi dengan batas memori dan itu hanya didaur ulang setelah periode waktu yang bervariasi.
Semoga ini bisa membantu orang lain!
Salam pembuka,
sumber
Masalah saya adalah, jenis pengembalian layanan saya adalah string. Tapi saya mengembalikan string tipe xml:
<reponse><state>1</state><message>Operation was successfull</message</response>
jadi kesalahan terlempar.
sumber
dalam hal ini
layanan saya berfungsi untuk
download Files
dan kesalahan ini hanya muncul saat mencoba mengunduh
Big Files
jadi saya menemukan jawaban ini untuk Meningkatkan
maxRequestLength
ke nilai yang dibutuhkanweb.config
Saya tahu itu aneh, tapi masalah terpecahkan
jika Anda tidak melakukan operasi pengunggahan atau pengunduhan mungkin jawaban ini tidak akan membantu Anda
sumber
Bagi saya solusi dari Error ini sangat aneh. Itu adalah masalah alamat port dari EndpointAddress . Dalam Visual studio, alamat port file Anda (mis. Service1.svc) dan alamat port proyek wcf Anda harus sama dengan yang Anda berikan ke EndpointAddress . Izinkan saya menjelaskan solusi ini secara rinci.
Ada dua langkah untuk memeriksa alamat porta.
Di Proyek WCF Anda, klik kanan ke file Layanan Anda (mis. Service1.svc) -> lalu pilih Lihat di browser sekarang di browser Anda, Anda memiliki url seperti http: // localhost: 61122 / Service1.svc jadi sekarang catat alamat port Anda sebagai a 61122
Klik kanan proyek wcf Anda -> lalu pilih Properties -> pergi ke Tab Web -> Sekarang di bagian Server -> pilih Use Visual Studio Development Server -> pilih Specific Port dan berikan alamat port yang sebelumnya kami temukan dari Service1 kami. layanan svc. Yaitu (61122) .
Sebelumnya saya memiliki alamat port yang berbeda. Setelah Menentukan alamat port dengan benar yang telah saya berikan ke EndpointAddress , masalah saya terpecahkan.
Saya harap ini dapat menyelesaikan masalah Anda.
sumber
Juga memiliki masalah ini dan itu karena lupa menghias model saya dengan atribut DataContract dan DataMember
sumber
Jika Anda memiliki database (bekerja di studio visual), pastikan tidak ada kunci asing di tabel, saya memiliki kunci asing dan itu memberi saya kesalahan ini dan ketika saya menghapusnya, itu berjalan dengan lancar
sumber