I’ve been trying to use a couple of libraries like MSAL.NET and Microsoft Graph, which all make http calls with HttpClient using TLS, in WebGL using Unity 6.
They all work fantastic in the Editor, but in WebGL, even if the call stack is a little bit different for each one of the failures, all fail at the same point; after UnityTls_get_NativeInterface
is called.
As far as I was able to see in the source code of the Mono implementation of Unity, the getter for NativeInterface
in UnityTLS first calls GetUnityTlsInterface
, which returns a pointer, and then calls Marshal.PtrToStructure<unity_interface_struct>
sending the pointer it got from GetUnityTlsInterface, and at this point the application throws a Runtime Error like this:
RuntimeError: null function or function signature mismatch
at Marshal_PtrToStructure_m235E141E21BFB69A01B07DDDF1702BA7D5723AC3 (Build.wasm.br:0x2e05957)
at Marshal_PtrToStructure_TisRuntimeObject_mAFC160D8333711F9FE85A7C91B1BD048C32A8837_gshared (Build.wasm.br:0x2b70fd2)
at UnityTls_get_NativeInterface_m0B8B1D4A4F73BE68A2E945017CE920053325F1D1 (Build.wasm.br:0x23579ac)
at MonoTlsProviderFactory_InitializeProviderRegistration_m1D24100D1C54F7529B4432D69EAE8EBCB3116B10 (Build.wasm.br:0x2365f1c)
at MonoTlsProviderFactory_InitializeInternal_m719BE4475DBBA40EB7E0BBF3C3D65F17791E488A (Build.wasm.br:0x2361fbe)
at MonoTlsProviderFactory_GetProviderInternal_m08BDCDD3919FBAEDFB32CB5F0876D10E32C147A7 (Build.wasm.br:0x2361c9a)
at MonoWebRequestHandler_CreateWebRequest_mBB805D3B8032C3CB3B2D71E04E3C319F0E627D1F (Build.wasm.br:0x2080072)
at U3CSendAsyncU3Ed__99_MoveNext_mD015CC1B55C285519224F811D1CA69F527F8F633 (Build.wasm.br:0x2082bcd)
at AsyncTaskMethodBuilder_1_Start_TisU3CSendAsyncU3Ed__99_t7F65CEF5874E988C0C5867B0B6EA5E52FBF3DB22_mA4F41AC898AFC342AA04CBC328540329A15BB400_gshared (Build.wasm.br:0x1efd40e)
at MonoWebRequestHandler_SendAsync_m218FBC412C4300E40FF988645B1BF648580D5B2F (Build.wasm.br:0x20823fe)
at HttpClientHandler_SendAsync_m024FF40EDC1A14211704DB0DE00BCB7B9E9FD406 (Build.wasm.br:0x207fa91)
at U3CSendAsyncWorkerU3Ed__47_MoveNext_mE32A14C1E715F40E33134DD8478CDFA53F9B0195 (Build.wasm.br:0x208638a)
at AsyncTaskMethodBuilder_1_Start_TisU3CSendAsyncWorkerU3Ed__47_tB6556DD755EDCDAD5DC1F1C5F5CA314BA5B282A5_m0B8B43F67B798C7EF2B0D99B5BAC790EB8FC918D_gshared (Build.wasm.br:0x1efb478)
at HttpClient_SendAsyncWorker_m705970670309B586A349D3D8E0A6F7FC41866656 (Build.wasm.br:0x2085f61)
at HttpClient_SendAsync_m5C9B076F873C5D2F4E5301937A1AFE3427346E71 (Build.wasm.br:0x20859f9)
at U3CProcessSyncOrAsyncU3Ed__11_MoveNext_m1B9D44CD5A41B1C0B41CE63933F1EC58F4B557A5 (Build.wasm.br:0x2c8d140)
at AsyncTaskMethodBuilder_Start_TisU3CProcessSyncOrAsyncU3Ed__11_t674D7A01939B5482636BAB03A832FB3B24B9654E_m0BA5CD8DB3B3D1842318B3E2A9753CF9797DD8A7_gshared (Build.wasm.br:0x1f2112a)
at HttpClientTransport_ProcessSyncOrAsync_mA083BCA2917543F169E32BA27DD4066626C8C655 (Build.wasm.br:0x2c89d8b)
at HttpClientTransport_ProcessAsync_m1761D068B0677D202F7E04F34700D321DA7DB8EF (Build.wasm.br:0x2c89ca6)
at U3CProcessAsyncU3Ed__4_MoveNext_mDE2424E93432F74F3013CD81A5EC5E339C504B5B (Build.wasm.br:0x2c918a3)
at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__4_t00983D3D0D47391E37257685EBE5FF10B91AA680_m13FE4D4D916E5F6FDFB67A4D4CFC9279CA3726DB_gshared (Build.wasm.br:0x1f21606)
at HttpPipelineTransportPolicy_ProcessAsync_m3C25036DB5D04FBFFF7CEB47BAEBD5A33918B882 (Build.wasm.br:0x2c9176d)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at RequestActivityPolicy_ProcessNextAsync_m5EC7D6D32A5C147245C8B4C82C42CAEBFF26091A (Build.wasm.br:0x2c96c95)
at RequestActivityPolicy_ProcessAsync_m82F75E862DCE63641B8C8E85E983C62F232C99F4 (Build.wasm.br:0x2c96915)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at U3CProcessAsyncU3Ed__5_MoveNext_m933D3B8DA7C67C8FC8657B393695C5D0220A0B34 (Build.wasm.br:0x2c99423)
at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__5_tB70F4472A669BD4E06EC37BA67D55F7118C9CA9C_m3EA2D5308AA9354EE043E3F06D45EECE6DEB87CA_gshared (Build.wasm.br:0x1f22f89)
at ResponseBodyPolicy_ProcessAsync_mB62326D63CBCCAF063D38DB7DBB89D230E21F592 (Build.wasm.br:0x2c98100)
at ResponseBodyPolicy_ProcessAsync_mB10AF5227BC75E3FAEC126C95B7579AB95F6B753 (Build.wasm.br:0x2c97fb6)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at LoggingPolicy_ProcessAsync_m198B6062B96AE46B25433F40B82005FE71C53B1C (Build.wasm.br:0x2c91f0e)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at U3CProcessAsyncU3Ed__7_MoveNext_m8F9EA47A96B2E7FE7115715803837F34D5DF9C00 (Build.wasm.br:0x2c9b4c6)
at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__7_tF93FCBDE185D82EE192E9D733BD7D1BB5C66A6A8_mA0FF30FF95590F3DB17B74A8250EDE9AC5C6AF9C_gshared (Build.wasm.br:0x1f22aad)
at RedirectPolicy_ProcessAsync_mEA2EDA716DCAEF6C683075ED727FC2002B263866 (Build.wasm.br:0x2c9aa97)
at RedirectPolicy_ProcessAsync_m66AAF4BFD94B8542C09FF759339D10F31AFE06E5 (Build.wasm.br:0x2c9b28c)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at U3CProcessAsyncU3Ed__5_MoveNext_m7BDC7E3865E802F3BB57BCDD8F25CC6F47CFFF93 (Build.wasm.br:0x2c9cb50)
at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__5_tFA89897995094E505CC8D6917121AEE03E3259C5_m7077D434CD9D20629AD7E81ACE6B25F27B089434_gshared (Build.wasm.br:0x1f230c0)
at RetryPolicy_ProcessAsync_mEF998472D48BA42D2F7C9FA97A32CF6C257A4389 (Build.wasm.br:0x2c9c1bd)
at RetryPolicy_ProcessAsync_m6984D901B06EA9A0393237228D864C24D29D3A93 (Build.wasm.br:0x2c9c0cd)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at HttpPipelineSynchronousPolicy_ProcessAsync_m522AA5120C6F5E7D0999ABC89DB55659701D0781 (Build.wasm.br:0x2c90a66)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at HttpPipelineSynchronousPolicy_ProcessAsync_m522AA5120C6F5E7D0999ABC89DB55659701D0781 (Build.wasm.br:0x2c90a66)
at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
at HttpPipelineSynchronousPolicy_ProcessAsync_m522AA5120C6F5E7D0999ABC89DB55659701D0781 (Build.wasm.br:0x2c90a66)
at HttpPipeline_SendAsync_mB1D0B5B2593F7AEA568B48AC56751A7A1FB8A28A (Build.wasm.br:0x2c8dab9)
at U3CSendRequestAsyncU3Ed__18_MoveNext_m15B9E19C255F658D4FC72DBB9C5E5208F6200F39 (Build.wasm.br:0x2c8ef23)
I’m not sure if this is a Mono bug or an IL2CPP bug, or maybe even a WebGL specific bug, and I wonder if other people have had a similar problem like this one.