ਬਲੇਜ਼ਰ ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ JavaScript ਅਤੇ .NET ਏਕੀਕਰਣ ਨੂੰ ਸੰਭਾਲਣਾ
Blazor ਸਰਵਰ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ.NET ਫੰਕਸ਼ਨਾਂ ਨਾਲ JavaScript ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਨਾਲ ਕਦੇ-ਕਦਾਈਂ ਅਚਾਨਕ ਸਮੱਸਿਆਵਾਂ ਪੈਦਾ ਹੋ ਸਕਦੀਆਂ ਹਨ। "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ" ਗਲਤੀ ਜੋ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਤੋਂ NET ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨ ਵੇਲੇ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ, ਡਿਵੈਲਪਰਾਂ ਲਈ ਅਕਸਰ ਸਮੱਸਿਆ ਹੁੰਦੀ ਹੈ। ਬਲੇਜ਼ਰ ਕੰਪੋਨੈਂਟਸ ਦੇ ਬਾਹਰੋਂ static.NET ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ, ਇਹ ਸਮੱਸਿਆ ਕਾਫ਼ੀ ਤੰਗ ਕਰਨ ਵਾਲੀ ਹੋ ਸਕਦੀ ਹੈ।
ਅਸੀਂ ਇਸ ਲੇਖ ਵਿੱਚ ਇੱਕ ਆਮ ਸਥਿਤੀ ਦੀ ਜਾਂਚ ਕਰਾਂਗੇ ਜਿੱਥੇ ਇਹ ਸਮੱਸਿਆ ਬਲੇਜ਼ਰ ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਪੈਦਾ ਹੁੰਦੀ ਹੈ। ਸਮੱਸਿਆ ਆਮ ਤੌਰ 'ਤੇ ਉਦੋਂ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ ਜਦੋਂ ਤੁਸੀਂ JavaScript ਵਿੱਚ 'window.DotNet' ਆਬਜੈਕਟ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ a.NET ਵਿਧੀ ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹੋ, ਖਾਸ ਤੌਰ 'ਤੇ ਜੇਕਰ ਵਿਧੀ ਕਿਸੇ ਹਿੱਸੇ ਦੀ ਬਜਾਏ ਕਿਸੇ ਸੇਵਾ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ। ਲੌਗਿੰਗ ਵਰਗੇ ਨਿਰੰਤਰ ਕੰਮਾਂ ਲਈ, ਇਹ ਤਰੀਕਾ ਮਦਦਗਾਰ ਹੋ ਸਕਦਾ ਹੈ।
ਅਸੀਂ ਇੱਕ ਅਸਲ-ਸੰਸਾਰ ਉਦਾਹਰਨ ਉੱਤੇ ਜਾਵਾਂਗੇ ਜੋ ਤੁਹਾਨੂੰ ਦਿਖਾਏਗਾ ਕਿ ਇੱਕ ਸਥਿਰ ਸਹਾਇਕ ਸੇਵਾ ਚਲਾਉਣ ਲਈ ਤੁਹਾਡੇ ਬਲੇਜ਼ਰ ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਸੰਰਚਿਤ ਕਰਨਾ ਹੈ। ਇਰਾਦਾ ਇਹ ਗਾਰੰਟੀ ਦੇਣਾ ਹੈ ਕਿ ਇਹ ਸੇਵਾ JavaScript ਨਾਲ ਸਹੀ ਢੰਗ ਨਾਲ ਸੰਚਾਰ ਕਰ ਸਕਦੀ ਹੈ, ਖਾਸ ਗਲਤੀਆਂ ਤੋਂ ਬਚ ਕੇ, ਜਿਸ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਡਿਸਪੈਚਰ ਗਲਤੀਆਂ ਹੁੰਦੀਆਂ ਹਨ। ਤੁਸੀਂ ਦੇਖੋਗੇ ਕਿ ਗਲਤ ਨੇਮਸਪੇਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜਾਂ ਸੇਵਾ ਨੂੰ ਗਲਤ ਤਰੀਕੇ ਨਾਲ ਸ਼ੁਰੂ ਕਰਨ ਨਾਲ ਇਹ ਸਮੱਸਿਆਵਾਂ ਕਿਵੇਂ ਆ ਸਕਦੀਆਂ ਹਨ।
ਅੰਤ ਵਿੱਚ, ਅਸੀਂ ਇਸ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀਆਂ ਕਾਰਵਾਈਆਂ 'ਤੇ ਜਾਵਾਂਗੇ ਅਤੇ ਗਾਰੰਟੀ ਦੇਵਾਂਗੇ ਕਿ JavaScript ਤੁਹਾਡੇ.NET ਵਿਧੀਆਂ ਨੂੰ ਇਕਸਾਰਤਾ ਨਾਲ ਕਾਲ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਆਪਣੇ ਬਲੇਜ਼ਰ ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਮਜ਼ਬੂਤ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ ਇਹਨਾਂ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਕੇ ਇਸਨੂੰ JavaScript ਇੰਟਰਪੌਪ ਦਾ ਸਮਰਥਨ ਕਰਨ ਦੇ ਹੋਰ ਸਮਰੱਥ ਬਣਾ ਸਕਦੇ ਹੋ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
JSInvokable | ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ JavaScript ਤੋਂ a.NET ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਨਾ ਸੰਭਵ ਬਣਾਉਂਦੀ ਹੈ। ਉਦਾਹਰਨ ਵਿੱਚ ਫੰਕਸ਼ਨ ਨੂੰ [JSInvokable("WriteInfo")] ਦੁਆਰਾ JavaScript ਕਾਲਾਂ ਲਈ ਉਪਲਬਧ ਵਜੋਂ ਚਿੰਨ੍ਹਿਤ ਕੀਤਾ ਗਿਆ ਹੈ, ਜੋ ਇਸਨੂੰ ਬਲੇਜ਼ਰ ਵਿੱਚ JavaScript ਇੰਟਰਪੌਪ ਲਈ ਜ਼ਰੂਰੀ ਬਣਾਉਂਦਾ ਹੈ। |
DotNet.invokeMethodAsync | ਇਹ JavaScript ਫੰਕਸ਼ਨ JavaScript ਦੇ ਅੰਦਰੋਂ ਅਸਿੰਕਰੋਨਸ ਤੌਰ 'ਤੇ ਇੱਕ static.NET ਵਿਧੀ ਨੂੰ ਕਾਲ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਵਿੰਡੋ ਉਦਾਹਰਨ. ਪੰਨੇ ਤੋਂ C# ਫੰਕਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨ ਲਈ DotNet.invokeMethodAsync('MyNamespace', 'WriteInfo', ਸੁਨੇਹਾ) ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ। |
ILogger<T> | ASP.NET ਕੋਰ ਐਪਸ ਵਿੱਚ, ਲੌਗਿੰਗ ILogger ਦੁਆਰਾ ਯੋਗ ਕੀਤੀ ਜਾਂਦੀ ਹੈ |
Mock<T> | ਮੋਕ ਦਾ ਮਖੌਲ |
Times.Once | ਯੂਨਿਟ ਟੈਸਟ ਵਿੱਚ ਸਮਾਂ। ਇਹ ਦਾਅਵਾ ਕਿ ਨਕਲ ਕੀਤੇ ਲੌਗਰ ਦੀ ਵਿਧੀ ਨੂੰ ਟੈਸਟ ਦੌਰਾਨ ਇੱਕ ਵਾਰ ਹੀ ਬੁਲਾਇਆ ਜਾਂਦਾ ਹੈ, ਇੱਕ ਵਾਰ ਸ਼ਬਦ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਕਾਲ ਕੀਤੇ ਜਾਣ 'ਤੇ ਵਿਧੀ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦੀ ਹੈ। |
builder.Services.AddSingleton | ਇਸ ਕਮਾਂਡ ਨਾਲ, ASP.NET ਕੋਰ ਵਿੱਚ ਇੱਕ ਸੇਵਾ ਨਿਰਭਰਤਾ ਇੰਜੈਕਸ਼ਨ ਕੰਟੇਨਰ ਨਾਲ ਰਜਿਸਟਰ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਬਿਲਡਰ.ਸੇਵਾਵਾਂ.ਐਡਸਿੰਗਲਟਨ ਨੂੰ ਰੁਜ਼ਗਾਰ ਦੇਣਾ |
Debugger | ਜਦੋਂ ਡੀਬਗਿੰਗ ਟੂਲ ਬਰਾਊਜ਼ਰ ਵਿੱਚ ਖੁੱਲ੍ਹੇ ਹੁੰਦੇ ਹਨ, ਤਾਂ JavaScript ਡੀਬੱਗਰ; ਸਟੇਟਮੈਂਟ ਸਕ੍ਰਿਪਟ ਨੂੰ ਰੋਕਦੀ ਹੈ। ਇਹ ਤੁਹਾਨੂੰ ਰੀਅਲ ਟਾਈਮ ਵਿੱਚ ਮੁੱਲ ਦੇਖਣ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਿ 'ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਹੈਜ਼ ਬੀਨ ਸੈਟ' ਗਲਤੀ ਵਰਗੀਆਂ ਸਮੱਸਿਆਵਾਂ ਦਾ ਨਿਦਾਨ ਕਰਨ ਲਈ ਮਦਦਗਾਰ ਹੈ। |
_mockLogger.Verify | This is used to verify that a method was called on a mock object in unit tests. For instance, _mockLogger.Verify(logger =>ਇਸਦੀ ਵਰਤੋਂ ਇਹ ਤਸਦੀਕ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਕਿ ਯੂਨਿਟ ਟੈਸਟਾਂ ਵਿੱਚ ਇੱਕ ਮੌਕ ਆਬਜੈਕਟ 'ਤੇ ਇੱਕ ਵਿਧੀ ਬੁਲਾਈ ਗਈ ਸੀ। ਉਦਾਹਰਨ ਲਈ, _mockLogger.Verify(logger => logger.LogInformation(message), Times.Once) ਪੁਸ਼ਟੀ ਕਰਦਾ ਹੈ ਕਿ ਲੌਗਿੰਗ ਵਿਧੀ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਸਹੀ ਆਰਗੂਮੈਂਟਾਂ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਗਈ ਸੀ। |
ਬਲੇਜ਼ਰ ਸਰਵਰ ਵਿੱਚ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਤੋਂ .NET ਇੰਟਰਓਪਰੇਬਿਲਟੀ ਨੂੰ ਸਮਝਣਾ
ਬਲੇਜ਼ਰ ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ JavaScript ਤੋਂ a.NET ਵਿਧੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਦਿੱਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਦੁਆਰਾ ਹੱਲ ਕੀਤਾ ਗਿਆ ਹੈ। ਮੁੱਖ ਮੁੱਦਾ ਉਦੋਂ ਪੈਦਾ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਪ੍ਰੋਗਰਾਮਰ ਕਾਲ ਡਾਟ ਨੈੱਟ ਫੰਕਸ਼ਨਾਂ ਲਈ JavaScript ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਨ ਪਰ "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ" ਗਲਤੀ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ। ਇਹ ਇਸ ਲਈ ਵਾਪਰਦਾ ਹੈ ਕਿਉਂਕਿ JavaScript.NET ਬੈਕਐਂਡ ਨਾਲ ਉਦੋਂ ਤੱਕ ਸੰਚਾਰ ਨਹੀਂ ਕਰ ਸਕਦਾ ਜਦੋਂ ਤੱਕ ਬਲੇਜ਼ਰ ਸਰਵਰ ਫਰੇਮਵਰਕ ਇਹ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕਰਦਾ ਕਿ ਕਾਲ ਡਿਸਪੈਚਰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੌਂਫਿਗਰ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਸ ਉਦਾਹਰਨ ਵਿੱਚ, .NET ਵਿਧੀਆਂ ਨੂੰ ਇੱਕ ਸਥਿਰ ਸੇਵਾ ਕਲਾਸ ਵਿੱਚ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜਿਸਨੂੰ ਕਹਿੰਦੇ ਹਨ JsHelperService, ਜੋ ਉਹਨਾਂ ਨੂੰ ਦੁਨੀਆ ਭਰ ਵਿੱਚ ਉਪਲਬਧ ਕਰਵਾਉਂਦਾ ਹੈ ਅਤੇ ਕਿਸੇ ਖਾਸ ਕੰਪੋਨੈਂਟ ਤੱਕ ਸੀਮਤ ਨਹੀਂ ਹੈ ਜੋ ਕੰਪੋਜ਼ ਹੋ ਸਕਦਾ ਹੈ।
ਦ [ਜੇ.ਐਸ.ਆਈ. ਬਣਾਉਣ ਲਈ ਕੋਰ ਕਮਾਂਡ ਜ਼ਰੂਰੀ ਹੈ .NET method callable from JavaScript. This attribute in the script designates the method JavaScript ਤੋਂ ਕਾਲ ਕਰਨ ਯੋਗ ਢੰਗ। ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਵਿਧੀ i>WriteInfo ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦੀ ਹੈ, ਇਸ ਨੂੰ JavaScript-ਪਹੁੰਚਯੋਗ ਬਣਾ ਰਿਹਾ ਹੈ। ਇਸ ਸੰਦੇਸ਼-ਲਾਗਿੰਗ ਸੇਵਾ ਦੀ ਮਦਦ ਨਾਲ, ਤੁਸੀਂ ਦੇਖ ਸਕਦੇ ਹੋ ਕਿ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਨੂੰ ਖੁੱਲ੍ਹਾ ਰੱਖਦੇ ਹੋਏ ਕੇਂਦਰੀ ਲੌਗਿੰਗ ਲਈ.NET ਦਾ ਲਾਭ ਕਿਵੇਂ ਲੈਣਾ ਹੈ। ਦ Init ਵਿਧੀ ਤੋਂ ਸੇਵਾ ਨੂੰ ਕਾਲ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ ਪ੍ਰੋਗਰਾਮ.ਸੀ.ਐਸ ਤਾਂ ਕਿ ਜਦੋਂ ਐਪਲੀਕੇਸ਼ਨ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ ਤਾਂ ਇਹ ਤੁਰੰਤ ਹੋ ਜਾਂਦੀ ਹੈ ਅਤੇ ਵੱਖਰੇ ਭਾਗਾਂ 'ਤੇ ਨਿਰਭਰ ਨਹੀਂ ਹੁੰਦੀ ਹੈ ਜਿਨ੍ਹਾਂ ਦਾ ਨਿਪਟਾਰਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
ਉਦਾਹਰਨ ਦਾ JavaScript ਹਿੱਸਾ ਅਸਿੰਕਰੋਨਸ ਤੌਰ 'ਤੇ .NET ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ window.DotNet.invokeMethodAsync. ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਹਰ ਇੱਕ ਵਿਧੀ ਜਿਸਨੂੰ ਬੁਲਾਇਆ ਜਾਂਦਾ ਹੈ, ਇੱਕ ਗੈਰ-ਬਲੌਕਿੰਗ ਤਰੀਕੇ ਨਾਲ ਪ੍ਰਕਿਰਿਆ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਦੂਜੇ ਕੋਡ ਨੂੰ ਅੰਤਰਿਮ ਵਿੱਚ ਚੱਲਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ ਜਦੋਂ ਇਹ a.NET ਜਵਾਬ ਦੀ ਉਡੀਕ ਕਰਦਾ ਹੈ। ਸਕ੍ਰਿਪਟ ਨਾਮ ਦੀ ਇੱਕ ਮੁੜ ਵਰਤੋਂ ਯੋਗ ਵਿਧੀ ਬਣਾਉਂਦੀ ਹੈ ਜਾਣਕਾਰੀ ਲਿਖੋ ਨੂੰ ਸੌਂਪ ਕੇ ਜਾਣਕਾਰੀ ਨੂੰ ਲੌਗ ਕਰਨ ਲਈ ਪ੍ਰੋਗਰਾਮ ਦੇ ਕਿਸੇ ਵੀ ਖੇਤਰ ਤੋਂ ਮੰਗਿਆ ਜਾ ਸਕਦਾ ਹੈ window.dotnetLogger ਵਸਤੂ। ਡੀਬੱਗਿੰਗ ਲਈ, ਸਕ੍ਰਿਪਟ ਏ ਡੀਬੱਗਰ ਲਾਈਨ, ਜੋ ਡਿਵੈਲਪਰ ਨੂੰ ਰਨਟਾਈਮ ਨੂੰ ਰੋਕਣ ਅਤੇ ਵੇਰੀਏਬਲ ਦੀ ਸਥਿਤੀ ਦੀ ਜਾਂਚ ਕਰਨ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ।
ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣਾ ਡਾਟਨੈੱਟ ਆਬਜੈਕਟ ਗਲੋਬਲ ਵਿੰਡੋ ਸਕੋਪ ਵਿੱਚ ਪਹੁੰਚਯੋਗ ਹੈ ਸਮੱਸਿਆ ਨਿਪਟਾਰਾ ਕਰਨ ਵੇਲੇ ਜ਼ਰੂਰੀ ਹੈ। JavaScript.NET ਵਿਧੀਆਂ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਹੈ ਜੇਕਰ ਇਹ ਵਸਤੂ ਗੈਰਹਾਜ਼ਰ ਹੈ ਜਾਂ ਗਲਤ ਢੰਗ ਨਾਲ ਕੌਂਫਿਗਰ ਕੀਤੀ ਗਈ ਹੈ। ਵਿਧੀ ਨੇਮਸਪੇਸ ਨੂੰ ਵਿੱਚ ਸਹੀ ਢੰਗ ਨਾਲ ਸੰਬੋਧਿਤ ਕਰਨ ਦੀ ਲੋੜ ਹੈ invokeMethodAsync ਸਮੱਸਿਆ ਨੂੰ ਰੋਕਣ ਲਈ ਕਾਲ ਕਰੋ। ਨਾਮ-ਸਥਾਨ ਦਾ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ ਜਾਂ ਸੇਵਾ ਨੂੰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਰਜਿਸਟਰ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ ਪ੍ਰੋਗਰਾਮ.ਸੀ.ਐਸ ਆਮ ਗਲਤੀਆਂ ਹਨ। ਸੇਵਾ ਦੇ ਨਿਪਟਾਰੇ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਸਿੰਗਲਟਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸੇਵਾ ਨੂੰ ਰਜਿਸਟਰ ਕਰਕੇ ਹੱਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਬਿਲਡਰ।ਸੇਵਾਵਾਂ।ਐਡਸਿੰਗਲਟਨ, ਜੋ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਸੇਵਾ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਮਿਆਦ ਲਈ ਉਪਲਬਧ ਹੈ।
ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਏਕੀਕਰਣ ਦੇ ਨਾਲ ਬਲੇਜ਼ਰ ਸਰਵਰ ਵਿੱਚ 'ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ' ਫਿਕਸ ਕਰਨਾ
ਬਲੇਜ਼ਰ ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ JavaScript ਏਕੀਕਰਣ। ਸਥਿਰ ਸੇਵਾ ਕਲਾਸਾਂ ਰਾਹੀਂ JavaScript calls.NET ਵਿਧੀਆਂ।
namespace MyNamespace.Utility
{
public static class JsHelperService
{
static JsHelperService()
{
var i = 0; // Constructor breakpoint test
}
public static void Init() { /* Ensure initialization in Program.cs */ }
[JSInvokable("WriteInfo")]
public static void WriteInfo(string message)
{
Logger.Instance.WriteInfo(message);
}
}
}
ਹੱਲ 2: ਬਲੇਜ਼ਰ ਸਰਵਰ ਵਿੱਚ ਨਿਰਭਰਤਾ ਇੰਜੈਕਸ਼ਨ ਨਾਲ "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ" ਨੂੰ ਫਿਕਸ ਕਰਨਾ
Blazor ਸਰਵਰ JavaScript ਕਾਲਾਂ to.NET ਫੰਕਸ਼ਨਾਂ ਲਈ ਇੱਕ ਨਿਰੰਤਰ ਸੇਵਾ ਦੀ ਗਰੰਟੀ ਦੇਣ ਲਈ ਨਿਰਭਰਤਾ ਇੰਜੈਕਸ਼ਨ (DI) ਤਕਨੀਕ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ।
namespace MyNamespace.Utility
{
public class JsHelperService
{
private readonly ILogger _logger;
public JsHelperService(ILogger<JsHelperService> logger)
{
_logger = logger;
}
[JSInvokable("WriteInfo")]
public void WriteInfo(string message)
{
_logger.LogInformation(message);
}
}
}
// In Program.cs, register the service
builder.Services.AddSingleton<JsHelperService>();
ਹੱਲ ਦੀ ਜਾਂਚ ਕਰਨਾ: ਬਲੇਜ਼ਰ ਸਰਵਰ ਲਈ ਫਰੰਟਐਂਡ ਜਾਵਾਸਕ੍ਰਿਪਟ ਸੈੱਟਅੱਪ
ਕਾਲ ਡਿਸਪੈਚਰ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰਨ ਲਈ ਇੱਕ JavaScript ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰੋ ਅਤੇ ਕਾਲ ਕਰਨ ਲਈ ਇੱਕ ਵਿੰਡੋ ਦੀ ਵਰਤੋਂ ਕਰੋ. NET ਵਿਧੀਆਂ ਨੂੰ ਅਸਿੰਕ੍ਰੋਨਸਲੀ. DotNet.
function setupLogging() {
debugger; // For debugging
window.dotnetLogger = window.dotnetLogger || {};
window.dotnetLogger.writeInfo = function (message) {
window.DotNet.invokeMethodAsync('MyNamespace', 'WriteInfo', message)
.then(response => console.log('Info logged successfully'))
.catch(error => console.error('Error logging info:', error));
};
}
Blazor ਸਰਵਰ JavaScript Interop ਲਈ ਯੂਨਿਟ ਟੈਸਟਿੰਗ
ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟ ਕਿ JavaScript ਅਤੇ ਬੈਕਐਂਡ ਸੇਵਾ Blazor ਸਰਵਰ ਨਾਲ ਸਫਲਤਾਪੂਰਵਕ ਸੰਚਾਰ ਕਰ ਰਹੇ ਹਨ।
using Xunit;
public class JsHelperServiceTests
{
private readonly Mock<ILogger<JsHelperService>> _mockLogger;
private readonly JsHelperService _jsHelperService;
public JsHelperServiceTests()
{
_mockLogger = new Mock<ILogger<JsHelperService>>();
_jsHelperService = new JsHelperService(_mockLogger.Object);
}
[Fact]
public void WriteInfo_LogsMessage()
{
var message = "Test log message";
_jsHelperService.WriteInfo(message);
_mockLogger.Verify(logger => logger.LogInformation(message), Times.Once);
}
}
Blazor JavaScript ਇੰਟਰਓਪਰੇਬਿਲਟੀ: ਬੇਸਿਕਸ ਤੋਂ ਪਰੇ
ਬਲੇਜ਼ਰ ਸਰਵਰ ਲਈ ਸ਼ਕਤੀਸ਼ਾਲੀ ਔਨਲਾਈਨ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਉਣ ਲਈ, JavaScript ਅਤੇ.NET ਏਕੀਕਰਣ ਜ਼ਰੂਰੀ ਹੈ। ਪਰ ਸਥਿਰ ਸੇਵਾਵਾਂ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਬਲੇਜ਼ਰ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਚੁਣੌਤੀਪੂਰਨ ਹੋ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ JavaScript ਨਾਲ ਜੁੜਿਆ ਹੋਵੇ। JavaScript ਤੋਂ ਕਾਲਿੰਗ.NET ਫੰਕਸ਼ਨ ਕਰਦੇ ਸਮੇਂ, "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ" ਗਲਤੀ ਅਕਸਰ ਹੁੰਦੀ ਹੈ। Blazor ਦੇ JavaScript Interop, ਜੋ ਕਿ ਕਰਾਸ-ਵਾਤਾਵਰਣ ਕਾਲਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕਾਲ ਡਿਸਪੈਚਰ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ, ਨੂੰ ਆਮ ਤੌਰ 'ਤੇ ਗਲਤ ਸੈੱਟਅੱਪ ਜਾਂ ਗੁੰਮ ਸੰਰਚਨਾਵਾਂ ਕਾਰਨ ਇਹ ਸਮੱਸਿਆ ਹੁੰਦੀ ਹੈ। ਅਜਿਹੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਣ ਲਈ, ਕਿਸੇ ਨੂੰ ਇਹ ਸਮਝਣਾ ਚਾਹੀਦਾ ਹੈ ਕਿ ਬਲੇਜ਼ਰ ਆਪਣੇ ਡਿਸਪੈਚਰ ਨੂੰ ਕਿਵੇਂ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਕਾਇਮ ਰੱਖਦਾ ਹੈ।
ਇਸ ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਨ ਦਾ ਇੱਕ ਤਰੀਕਾ ਹੈ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਲਾਂਚ ਕਰਨ ਸਮੇਂ NET ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਉਜਾਗਰ ਕਰਨ ਵਾਲੀ ਸੇਵਾ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਤਤਕਾਲ ਕੀਤਾ ਗਿਆ ਹੈ। ਸੇਵਾ ਨੂੰ ਏ ਵਜੋਂ ਜੋੜਿਆ ਗਿਆ ਹੈ singleton ਵਿੱਚ Program.cs, ਤਾਂ ਤੁਸੀਂ ਜਾਣਦੇ ਹੋ ਕਿ ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਮਿਆਦ ਲਈ ਉੱਥੇ ਰਹੇਗਾ। ਦਿੱਤੀ ਗਈ ਹੈ, ਜੋ ਕਿ ਸਥਿਰ ਕਲਾਸਾਂ ਵਾਂਗ JsHelperService ਕਿਸੇ ਖਾਸ ਹਿੱਸੇ 'ਤੇ ਨਿਰਭਰ ਨਹੀਂ ਹਨ, ਇਹ ਉਹਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਖਾਸ ਤੌਰ 'ਤੇ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ। ਸੇਵਾ ਨੂੰ ਬਣਾਈ ਰੱਖਣਾ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ JavaScript ਲਾਈਫਸਾਈਕਲ ਨਾਲ ਸਬੰਧਤ ਸਮੱਸਿਆਵਾਂ ਦਾ ਸਾਹਮਣਾ ਕੀਤੇ ਬਿਨਾਂ. NET ਵਿਧੀਆਂ ਨੂੰ ਲਗਾਤਾਰ ਕਾਲ ਕਰ ਸਕਦਾ ਹੈ।
ਦੀ ਮੌਜੂਦਗੀ ਦੀ ਪੁਸ਼ਟੀ ਕਰ ਰਿਹਾ ਹੈ DotNet JavaScript ਵਾਤਾਵਰਣ ਵਿੱਚ ਵਸਤੂ ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਹਿੱਸਾ ਹੈ। ਲਈ ਜ਼ਰੂਰੀ ਹੈ window.DotNet JavaScript ਤੋਂ ਕਿਸੇ ਵੀ.NET ਵਿਧੀਆਂ ਨੂੰ ਕਾਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਲੋਡ ਕਰਨ ਅਤੇ ਉਪਲਬਧ ਹੋਣ ਲਈ ਵਸਤੂ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ Blazor.webassembly.js ਫਾਈਲ ਇਸ ਆਬਜੈਕਟ ਨੂੰ ਉਚਿਤ ਢੰਗ ਨਾਲ ਸ਼ੁਰੂ ਕਰਦੀ ਹੈ, ਨਹੀਂ ਤਾਂ ਹੇਠਾਂ ਦਿੱਤੀ ਗਈ ਗਲਤੀ ਹੋ ਸਕਦੀ ਹੈ। ਤੁਸੀਂ ਸ਼ੁਰੂਆਤ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਲਈ JavaScript ਡੀਬੱਗਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸ ਵਸਤੂ ਦੀ ਉਪਲਬਧਤਾ ਦਾ ਪਤਾ ਲਗਾ ਸਕਦੇ ਹੋ।
Blazor JavaScript ਏਕੀਕਰਣ ਬਾਰੇ ਆਮ ਸਵਾਲ
- ਬਲੇਜ਼ਰ ਸਰਵਰ ਕਿਉਂ ਰਿਪੋਰਟ ਕਰਦਾ ਹੈ ਕਿ "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ"?
- ਜਦੋਂ JavaScript ਬਲੇਜ਼ਰ ਕਾਲ ਡਿਸਪੈਚਰ ਨੂੰ ਕੌਂਫਿਗਰ ਕੀਤੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ a.NET ਵਿਧੀ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ, ਤਾਂ ਇੱਕ ਤਰੁੱਟੀ ਹੁੰਦੀ ਹੈ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਗਲੋਬਲ JavaScript ਸੰਦਰਭ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ window.DotNet.
- ਮੈਂ ਬਲੇਜ਼ਰ ਸਰਵਰ ਵਿੱਚ ਸੇਵਾਵਾਂ ਨੂੰ ਕਿਵੇਂ ਜਾਰੀ ਰੱਖ ਸਕਦਾ ਹਾਂ?
- Blazor ਸਰਵਰ ਵਿੱਚ ਸੇਵਾਵਾਂ ਨੂੰ ਵਰਤ ਕੇ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ builder.Services.AddSingleton<T>() ਉਹਨਾਂ ਨੂੰ ਏ ਵਜੋਂ ਰਜਿਸਟਰ ਕਰਨ ਲਈ singleton ਵਿੱਚ Program.cs ਫਾਈਲ।
- ਬਲੇਜ਼ਰ ਵਿੱਚ [JSInvokable] ਦੀ ਕੀ ਭੂਮਿਕਾ ਹੈ?
- ਦ [JSInvokable] ਵਿਸ਼ੇਸ਼ਤਾ ਦਰਸਾਉਂਦੀ ਹੈ.NET ਫੰਕਸ਼ਨ ਜੋ JavaScript ਤੋਂ ਪਹੁੰਚਯੋਗ ਹਨ। ਸਰਵਰ-ਸਾਈਡ ਅਤੇ ਕਲਾਇੰਟ-ਸਾਈਡ ਵਾਤਾਵਰਨ ਵਿਚਕਾਰ ਸੰਚਾਰ ਨੂੰ ਸੰਭਵ ਬਣਾਉਣਾ ਜ਼ਰੂਰੀ ਹੈ।
- ਮੈਂ Blazor ਵਿੱਚ JavaScript ਅਤੇ.NET ਨਾਲ ਅੰਤਰ-ਕਾਰਜਸ਼ੀਲਤਾ ਮੁਸ਼ਕਲਾਂ ਦਾ ਨਿਪਟਾਰਾ ਕਿਵੇਂ ਕਰ ਸਕਦਾ ਹਾਂ?
- JavaScript ਵਿੱਚ, ਤੁਸੀਂ Blazor-to-JavaScript ਕਾਲਾਂ ਦੀ ਸਥਿਤੀ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਨੂੰ ਰੋਕ ਸਕਦੇ ਹੋ। debugger ਹੁਕਮ. ਇਹ ਇਹ ਨਿਰਧਾਰਤ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਬਲੇਜ਼ਰ ਡਿਸਪੈਚਰ ਦੀ ਸ਼ੁਰੂਆਤ ਹੋਈ ਹੈ।
- ਮੈਨੂੰ ਬਲੇਜ਼ਰ ਵਿੱਚ ਸਥਿਰ ਸੇਵਾ ਕਲਾਸਾਂ ਦੀ ਵਰਤੋਂ ਕਿਉਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ?
- ਜਦੋਂ ਤੁਹਾਨੂੰ ਲਗਾਤਾਰ ਸੇਵਾਵਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਲੌਗਿੰਗ, ਸਥਿਰ ਸੇਵਾ ਕਲਾਸਾਂ ਕੰਮ ਆਉਂਦੀਆਂ ਹਨ। ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ Program.cs, ਉਹਨਾਂ ਨੂੰ ਇੱਕ ਵਾਰ ਤਤਕਾਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਪ੍ਰੋਗਰਾਮ ਦੇ ਅੰਦਰ ਕਿਸੇ ਵੀ ਸਥਾਨ ਤੋਂ ਪਹੁੰਚਯੋਗ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
Blazor JavaScript Interop 'ਤੇ ਅੰਤਿਮ ਵਿਚਾਰ
ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੀ JavaScript.NET ਵਾਤਾਵਰਨ ਨਾਲ ਸਹੀ ਢੰਗ ਨਾਲ ਇੰਟਰੈਕਟ ਕਰਦੀ ਹੈ ਅਤੇ ਤੁਹਾਡੀ ਬਲੇਜ਼ਰ "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ" ਗਲਤੀ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਸ਼ੁਰੂਆਤੀ ਸਮੇਂ ਸੇਵਾ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸ਼ੁਰੂ ਕੀਤਾ ਗਿਆ ਹੈ। ਸਥਿਰ ਸੇਵਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਪੂਰੇ ਜੀਵਨ ਚੱਕਰ ਦੌਰਾਨ ਉਹਨਾਂ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਦੁਆਰਾ ਡਿਸਪੈਚਰ-ਸਬੰਧਤ ਸਮੱਸਿਆਵਾਂ ਤੋਂ ਬਚੋ।
ਕਾਲ ਕਰਨ ਦੇ ਤਰੀਕਿਆਂ ਤੋਂ ਪਹਿਲਾਂ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਵੀ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿ ਡਾਟਨੈੱਟ ਆਬਜੈਕਟ ਸਹੀ ਢੰਗ ਨਾਲ ਲੋਡ ਕੀਤਾ ਗਿਆ ਹੈ. ਵਿਕਾਸਕਾਰ JavaScript-to-.NET ਸੰਚਾਰ ਨੂੰ ਤੇਜ਼ ਕਰ ਸਕਦੇ ਹਨ ਅਤੇ ਸਹੀ ਡੀਬੱਗਿੰਗ ਟੂਲਸ ਅਤੇ ਕੌਂਫਿਗਰੇਸ਼ਨਾਂ ਨੂੰ ਥਾਂ 'ਤੇ ਰੱਖ ਕੇ Blazor ਐਪਸ ਵਿੱਚ ਇਹਨਾਂ ਅਕਸਰ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਦੂਰ ਕਰ ਸਕਦੇ ਹਨ।
ਹਵਾਲੇ ਅਤੇ ਸਰੋਤ
- Blazor JavaScript ਇੰਟਰਓਪਰੇਬਿਲਟੀ ਦਸਤਾਵੇਜ਼ ਵਰਤਣ ਲਈ ਡੂੰਘਾਈ ਨਾਲ ਮਾਰਗਦਰਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ DotNet.invokeMethodAsync ਅਤੇ ਡਿਸਪੈਚਰ ਗਲਤੀਆਂ ਨੂੰ ਹੱਲ ਕਰਨਾ। Blazor JavaScript Interop
- ਬਲੇਜ਼ਰ ਸਰਵਰ 'ਤੇ ਮਾਈਕਰੋਸਾਫਟ ਦੀ ਅਧਿਕਾਰਤ ਗਾਈਡ ਦੱਸਦੀ ਹੈ ਕਿ ਸੇਵਾ ਦੇ ਜੀਵਨ ਕਾਲ ਦਾ ਪ੍ਰਬੰਧਨ ਕਿਵੇਂ ਕਰਨਾ ਹੈ ਅਤੇ ਸੇਵਾਵਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕਿਵੇਂ ਰਜਿਸਟਰ ਕਰਨਾ ਹੈ ਬਿਲਡਰ।ਸੇਵਾਵਾਂ।ਐਡਸਿੰਗਲਟਨ ਵਿੱਚ ਪ੍ਰੋਗਰਾਮ.ਸੀ.ਐਸ. ਬਲੇਜ਼ਰ ਵਿੱਚ ਨਿਰਭਰਤਾ ਇੰਜੈਕਸ਼ਨ
- ਇਸ ਸਟੈਕ ਓਵਰਫਲੋ ਚਰਚਾ ਵਿੱਚ "ਕੋਈ ਕਾਲ ਡਿਸਪੈਚਰ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ" ਸਮੱਸਿਆ ਲਈ ਆਮ ਤਰੁਟੀਆਂ ਅਤੇ ਹੱਲ ਸ਼ਾਮਲ ਹਨ। ਬਲੇਜ਼ਰ ਸਰਵਰ ਕਾਲ ਡਿਸਪੈਚਰ ਗਲਤੀ