开发者

Completed Event not triggering for web service on some systems

开发者 https://www.devze.com 2023-02-03 17:22 出处:网络
This is rather weird issue that I am facing with by WCF/Silverlight application. I am using a WCF to get data from a database for my Silverlight application and the completed event is not triggering f

This is rather weird issue that I am facing with by WCF/Silverlight application. I am using a WCF to get data from a database for my Silverlight application and the completed event is not triggering for method in WCF on some systems. I have checked the called method executes properly has returns the values. I have checked via Fiddler and it clearly shows that response has the returned values as well. However the completed event is not getting triggered. Moreover in few of the systems, everything is fine and I am able to process the returned value in the completed method.

Any thoughts or suggestions would be greatly appreciated. I have tried searching around the web but without any luck :(

Following is the code.. Calling the method..

void RFCDeploy_Loaded(object sender, RoutedEventArgs e)
    {
        btnSelectFile.IsEnabled = true;
        btnUploadFile.IsEnabled = false;
        btnSelectFile.Click += new RoutedEventHandler(btnSelectFile_Click);
        btnUploadFile.Click += new RoutedEventHandler(btnUploadFile_Click);
        RFCChangeDataGrid.KeyDown += new KeyEventHandler(RFCChangeDataGrid_KeyDown);
        btnAddRFCManually.Click += new RoutedEventHandler(btnAddRFCManually_Click);
        ServiceReference1.DataService1Client ws = new BEVDashBoard.ServiceReference1.DataService1Client();
        ws.GetRFCChangeCompleted += new EventHandler<BEVDashBoard.ServiceReference1.GetRFCChangeCompleted开发者_C百科EventArgs>(ws_GetRFCChangeCompleted);
        ws.GetRFCChangeAsync();
        this.BusyIndicator1.IsBusy = true;
    }

Completed Event....

void ws_GetRFCChangeCompleted(object sender, BEVDashBoard.ServiceReference1.GetRFCChangeCompletedEventArgs e)
    {
        PagedCollectionView view = new PagedCollectionView(e.Result);
        view.GroupDescriptions.Add(new PropertyGroupDescription("RFC"));
        RFCChangeDataGrid.ItemsSource = view;
        foreach (CollectionViewGroup group in view.Groups)
        {
            RFCChangeDataGrid.CollapseRowGroup(group, true);
        }
        this.BusyIndicator1.IsBusy = false;
    }

Please note that this WCF has lots of other method as well and all of them are working fine.... I have problem with only this method...

Thanks...


As others have noted, a look at some of your code would help. But some things to check:

(1) Turn off "Enable Just My Code" under Debug/Options/Debugging/General, and set some breakpoints in the Reference.cs file, to see whether any of the low-level callback methods there are getting hit.

(2) Confirm that you're setting the completed event handlers, and on the right instance of the proxy client. If you're setting the event handlers on one instance, and making the call on another, that could result in the behavior you're describing.

(3) Poke around with MS Service Trace Viewer, as described here, and see if there are any obvious errors (usually helpfully highlighted in red).

Likely there are other things you could check, but this will keep you busy for a day or so :-).

(Edits made after code posted)

(4) You might want to try defining your ws variable at the class level rather than the function. In theory, having an event-handler defined on it means that it won't get garbage collected, but it's still a little odd, in that once you're out of the function, you don't have a handle to it anymore, and hence can't do important things like, say, closing it.

(5) If you haven't already, try rebuilding your proxy class through the Add Service Reference dialog box in Visual Studio. I've seen the occasional odd problem pop up when the web service has changed subtly and the client wasn't updated to reflect the changes: some methods will get called successfully, others won't.

(6) If you're likely to have multiple instances of a proxy client open at the same time, consider merging them into one instance (and use the optional "object userState" parameter of the method call to pass the callback, so you don't run into the nasty possibility of multiple event handlers getting assigned). I've run into nasty problems in the past when multiple instances were stepping on each other, and my current best practice is to structure my code in such a way that there's only ever one client instance open at a time. I know that's not necessarily what MS says, but it's been my experience.


This issue is because of special characters in one of the fields returned from DB which browser was not able to render. After considerable debug n search over the web, was able to find this out. Used Regular expressions to remove these special characters in WCF, the new returned values from the method was successfully rendered in various browsers on different system. :)


Make sure you have checked 'Generate asynchronous operations' in your service reference. Right-click on the service reference and check the box. This solved it for me.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号